美团8.23笔试前两题思路
第一题思路:
如果长度长的那边 <= m, 则短的作为x;
如果不满足上述条件,则长的作为x;
第二题思路:
题目要求这个美丽数组里面的所有数两两的&运算都得满足ai & aj = x,根据&运算的概念,两个位置都为1才能是1。
所以,根据这个概念来看,如果要满足两两&运算都得为x的话,那么这个数组里面的每个数,就必须占满所有的1的位置,即出现1的位置就已经固定了,就是X所在20位里面出现1的地方。
另外一个数的可选范围,就从X里面出现0的地方开始选,因为不管怎么样1 & 0 = 0,还是满足条件的。那么存在多少个0,就可选“多少个数 + 1(本身)”。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for (int i = 0; i < t; i++) {
int num = in.nextInt();
int n = num;
// 看那几位是0
List<Integer> zeros = new ArrayList<>();
for(int j = 0; j < 20; j++){
int sum = (n >> j) & 1;
if(sum == 0){
zeros.add(j);
}
}
System.out.println(zeros.size() + 1);
System.out.print(num + " ");
for(int j = 0; j < zeros.size(); j++){
System.out.print(num + (1 << zeros.get(j)) + " ");
}
System.out.println();
}
}
第三题思路(没写了):
打算按照树的思路去计算两个节点分别到Root的高度,然后根据是不是是不是在同一边,判断是加还是减。感觉这样肯定超时了,就没继续写了。
如果长度长的那边 <= m, 则短的作为x;
如果不满足上述条件,则长的作为x;
第二题思路:
题目要求这个美丽数组里面的所有数两两的&运算都得满足ai & aj = x,根据&运算的概念,两个位置都为1才能是1。
所以,根据这个概念来看,如果要满足两两&运算都得为x的话,那么这个数组里面的每个数,就必须占满所有的1的位置,即出现1的位置就已经固定了,就是X所在20位里面出现1的地方。
另外一个数的可选范围,就从X里面出现0的地方开始选,因为不管怎么样1 & 0 = 0,还是满足条件的。那么存在多少个0,就可选“多少个数 + 1(本身)”。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for (int i = 0; i < t; i++) {
int num = in.nextInt();
int n = num;
// 看那几位是0
List<Integer> zeros = new ArrayList<>();
for(int j = 0; j < 20; j++){
int sum = (n >> j) & 1;
if(sum == 0){
zeros.add(j);
}
}
System.out.println(zeros.size() + 1);
System.out.print(num + " ");
for(int j = 0; j < zeros.size(); j++){
System.out.print(num + (1 << zeros.get(j)) + " ");
}
System.out.println();
}
}
第三题思路(没写了):
打算按照树的思路去计算两个节点分别到Root的高度,然后根据是不是是不是在同一边,判断是加还是减。感觉这样肯定超时了,就没继续写了。
全部评论
第二题我也是这个思路,结果正确率就4.76%
数组长度等于1是什么意思,那个114514看不懂
第一题做一半越想越感觉没那么简单,后面顿悟会不会长方形可以斜着?但是一时半会也没思路就想着先提交再说,结果真就ac了没绷住
我是算法策略方向的 今天属于很简单的题了
卧槽,我还以为第一题是算筹优化天际线算法呢,居然这么简单
不能用ai吗最后一题
第一题为啥一直是0,我无语了。第二题思路是一样的,除非原数二进制是纯1,答案数组长度为1,任意值均可。其余就是,原数每有一个0,就把0变为1,加入数组。所以应该数组长度和原数二进制中的0的个数关系是,数组长度=0个数+1。
我直接dfs计算任意两点的距离,结果空间超限,只过了20%
我第二题题目都没看懂....
只A了第一题
相关推荐
昨天 11:45
未填写教育信息 golang kimariyb:A 了这题,用 python 写的。如果没有超过最大高度,就用最小的当底,如果超过了最大高度,就用最大的当底

点赞 评论 收藏
分享