美团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的高度,然后根据是不是是不是在同一边,判断是加还是减。感觉这样肯定超时了,就没继续写了。
全部评论
第二题我也是这个思路,结果正确率就4.76%
2 回复 分享
发布于 08-23 11:20 江苏
数组长度等于1是什么意思,那个114514看不懂
1 回复 分享
发布于 08-23 11:34 北京
第一题做一半越想越感觉没那么简单,后面顿悟会不会长方形可以斜着?但是一时半会也没思路就想着先提交再说,结果真就ac了没绷住
点赞 回复 分享
发布于 08-23 23:55 广东
我是算法策略方向的 今天属于很简单的题了
点赞 回复 分享
发布于 08-23 14:35 山西
卧槽,我还以为第一题是算筹优化天际线算法呢,居然这么简单
点赞 回复 分享
发布于 08-23 14:22 四川
不能用ai吗最后一题
点赞 回复 分享
发布于 08-23 12:00 四川
第一题为啥一直是0,我无语了。第二题思路是一样的,除非原数二进制是纯1,答案数组长度为1,任意值均可。其余就是,原数每有一个0,就把0变为1,加入数组。所以应该数组长度和原数二进制中的0的个数关系是,数组长度=0个数+1。
点赞 回复 分享
发布于 08-23 11:36 美国
我直接dfs计算任意两点的距离,结果空间超限,只过了20%
点赞 回复 分享
发布于 08-23 11:32 安徽
我第二题题目都没看懂....只A了第一题
点赞 回复 分享
发布于 08-23 11:17 湖北

相关推荐

评论
4
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务