全部评论
第一题 排序然后二分 第二题 权值并查集,记录一下每个集合的大小,以及每个运动员距离,集合父节点的距离 第三题 每次操作可以看作对一个环破环一条边,再连上一条边,先算一下有多少种操作可以达到预期,然后动态规划。
第二道题测试样例通过 但是整体0%
第二题不是贪心吗😂
最后一道编程题如何做?一直没有思路。。。。
第二题队列的那道我用c++怎么超内存了。。用了一个vector<queue>和一个哈希表,咋优化呀
额,第一题咋做啊,打表 + 次数相加,超时了。
第一题超时了,有什么好办法吗
第二题是运动员休息区域开启关闭以及查询是否在同一区域,只通过了10%,不知道为啥
二叉树第一道题的有不超时解法么
第三题思路是什么?
请问你们现在是研一还是研二呀,我研一做这个感觉好难
第一题用c++暴力就过了...
超时是提示超时还是样例不通过啊?,第一题a,b数组双循环一直是0%。是超时还是写错了啊
const biPart=(target,arr)=>{ let low=0,high=arr.length-1; let count=0; //找不到的情况下: 最后low与high相等时low总比high大1 //为什么这里不能用low<high? 因为low<high的话无法判断最后low/high的位置 //比如 1 2 4 6 6 7 找5最后low=3是一个比5大的数,找3最后low=2是一个比3小的数 //但是如果low<=high, 最后的low都是比要找的那个数大的,相当于low表示arr中比target大的数的个数!!! while (low<=high){ let mid=Math.floor((low+high)/2); if (arr[mid]>target){ high=mid-1; }else if (arr[mid]<target){ low=mid+1; }else { //找得到的情况: 这里存在重复数字,重复时最后low=high就没有上面的考虑 low=mid; //最后用low返回 //mid>0的情况下,找到第一个target的位置 while (mid&&arr[--mid]===target){ low--; } break; } } //low代表arr中小于target的数字的个数 //arr.length-low则表示arr中大于等于target数字的个数 return arr.length-low; } 请问一下第一题的二分是这种思路吗
分享下思路,第二题参赛队员之间建立有向图,(u,v)为边为1,否则为0,用深度遍历把弱于p求出个数,把一定强于p求出个数,p的名次范围则得到了
第二题问题转化后DFS 确定这个人有几个一定比他弱,几个人一定比他强就ok。 java代码ac public static void dfs(int[][] battles, int index, int p){ for(int i =0; i< battles.length; i++){ if(index == 0 && p == battles[i][0] && !post.contains(battles[i][1])){ post_count++; dfs(battles, index, battles[i][1]); post.add(battles[i][1]); } if(index == 1 && p == battles[i][1] && !pre.contains(battles[i][0])){ pre_count++; dfs(battles, index, battles[i][0]); pre.add(battles[i][0]); } } } }
我只有两题。。第一题是密码解密 第二题是前缀交换求不同结果。。。 看着看着都怀疑跟你们答的不是一个公司的笔试。。
相关推荐