游卡笔试

有n个人,要选n道题目,现在有4*n道题目,数组长度为4*n,数组中每个数字对应每道题的知识点个数。求n个人最大选择的知识点个数是多少
testcase(2,1,6,3,4,2,2,2)
return 4
解释,现在有2个人,他们可以选择1,6,3,4所以返回4
#游卡#

全部评论
楼主,23号的笔试过了没
2 回复 分享
发布于 2022-08-25 21:05 陕西
今天做的笔试竟然和你的这个一样,就离谱,试卷都没换
1 回复 分享
发布于 2023-03-07 20:49 江苏
这题啥意思?
点赞 回复 分享
发布于 2022-08-23 20:36 重庆
到底是不同题的个数还是知识点的个数啊
点赞 回复 分享
发布于 2022-08-23 20:45 天津
大家都是25%,可能就是题意他描述的不清楚。
点赞 回复 分享
发布于 2022-08-23 21:31 吉林
一考试就歇菜,就第一道题a了25。感觉题都见过,下来又会写了,第二题可以参考一下这个,就是一个简单的递归就可以了,当然在使用优先队列排序的时候还要再改一下,因为字符串比较大小的时候是会考虑小数点的,可以先把字符串转成double类型之后在再进行比较。 main() { String str = "1200130"; PriorityQueue<String[]> queue = new PriorityQueue<String[]>((a,b)->{ double x1 = Double.valueOf(a[0]); double x2 = Double.valueOf(b[0]); if(x1!=x2) { return (int)(x1 - x2); } Double y1 = Double.valueOf(a[1]); Double y2 = Double.valueOf(b[1]); return (int)(y1 - y2); }); StringBuilder builder = new StringBuilder(); dfs(str,0,queue); while(!queue.isEmpty()) { String[] poll = queue.poll(); builder.append(poll[0]); builder.append(","); builder.append(poll[1]); if(queue.isEmpty()){ continue; } builder.append(","); } System.out.println(builder.toString()); } public void dfs(String str, int index,PriorityQueue<String[]> queue) { if(index==str.length()){ // 以0开头或者走到了尽头 return; } if(str.charAt(index)=='0'||(index+1<str.length()&&str.charAt(index+1)=='0')){ dfs(str,index+1,queue); return; } String l = str.substring(0,index+1); String r = str.substring(index+1,str.length()); List<String> left = getAllNums(l); List<String> right = getAllNums(r); for(int j = 0; j < left.size(); j++) { for(int k = 0; k < right.size(); k++) { queue.add(new String[]{left.get(j),right.get(k)}); } } dfs(str,index+1,queue); } public List<String> getAllNums(String str){ ///不以0结尾 List<String> ans = new ArrayList<>(); ans.add(str); if(str.charAt(str.length()-1)=='0'){ return ans; } for(int i = 1; i < str.length()-1; i++) { if (str.charAt(i+1)==0){ continue; } ans.add(str.substring(0,i) + "." + str.substring(i,str.length())); } return ans; }
点赞 回复 分享
发布于 2022-08-23 21:35 吉林
第三题 动态规划,力扣上有一题是让求相等长度最大是多少,和这个稍微有一点区别。来年春招再见吧。 main(){ int[] binary = new int[]{1,0,0,0,1,1,0,0,1,1}; int len = binary.length; int[] dp = new int[len+1]; char[] var = new char[len]; int zero = binary[0]==0?1:0; var[0] = (char) (binary[0]+48); PriorityQueue<String> queue = new PriorityQueue<String>((a,b)->{ return b.compareTo(a); }); for(int i = 1; i < len; i++) { var[i] = (char) (binary[i] + 48); dp[i] = Math.max(dp[i-1],zero); if(binary[i]==0){ zero++; } } if(zero==0||zero==len){ ///一个0或者1都没有 return; } dp[len] = Math.max(zero,dp[len-1]); for(int i = 1; i < len; i++) { for(int j = i-1; j >=0; j--) { zero = dp[i+1] - dp[j]; if((i-j+2)-zero==zero) { String s = String.valueOf(var, j, i - j + 1); if(queue.isEmpty()){ queue.add(s); }else{ if(i-j+1>queue.peek().length()){ queue.clear(); } queue.add(s); } } } } System.out.println(queue.peek()); }
点赞 回复 分享
发布于 2022-08-23 22:16 吉林
您是啥岗啊 考这个题
点赞 回复 分享
发布于 2022-08-25 21:27 河北

相关推荐

评论
1
4
分享

创作者周榜

更多
牛客网
牛客企业服务