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

相关推荐

08-22 21:00
门头沟学院 Java
猫头夜鹰:我和你差不多,还两段大厂实习,小红书一道都没做出来都进面了,美团直接简历挂
投递美团等公司10个岗位
点赞 评论 收藏
分享
昨天 11:00
门头沟学院 Java
点赞 评论 收藏
分享
题目是n个长方形,我用go写的,一开始超时后改用hash缓存后还超时,真一点没招了,牛友们有遇到相同情况吗这是我的代码:package&nbsp;mainimport&nbsp;&amp;quot;fmt&amp;quot;func&nbsp;niceput(rectangles&nbsp;[][]int,&nbsp;height&nbsp;int)&nbsp;int&nbsp;{var&nbsp;ans&nbsp;intfor&nbsp;_,&nbsp;rectangle&nbsp;:=&nbsp;range&nbsp;rectangles&nbsp;{if&nbsp;rectangle[0]&nbsp;&amp;lt;=&nbsp;height&nbsp;&amp;amp;&amp;amp;&nbsp;rectangle[1]&nbsp;&amp;lt;=&nbsp;height&nbsp;{ans&nbsp;+=&nbsp;min(rectangle[0],&nbsp;rectangle[1])}&nbsp;else&nbsp;{if&nbsp;rectangle[0]&nbsp;&amp;gt;&nbsp;height&nbsp;{ans&nbsp;+=&nbsp;rectangle[0]}&nbsp;else&nbsp;{ans&nbsp;+=&nbsp;rectangle[1]}}}return&nbsp;ans}func&nbsp;min(a,&nbsp;b&nbsp;int)&nbsp;int&nbsp;{if&nbsp;a&nbsp;&amp;lt;=&nbsp;b&nbsp;{return&nbsp;a}return&nbsp;b}func&nbsp;main()&nbsp;{firstmap&nbsp;:=&nbsp;make(map[int]map[int]int)var&nbsp;n,&nbsp;m&nbsp;intfmt.Scan(&amp;amp;n,&nbsp;&amp;amp;m)ans&nbsp;:=&nbsp;0for&nbsp;i&nbsp;:=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;n;&nbsp;i++&nbsp;{recs&nbsp;:=&nbsp;[][]int{}var&nbsp;x,&nbsp;y&nbsp;intfmt.Scan(&amp;amp;x,&nbsp;&amp;amp;y)if&nbsp;x&nbsp;&amp;lt;&nbsp;y&nbsp;{x,&nbsp;y&nbsp;=&nbsp;y,&nbsp;x}//如果map中有结果,直接调用,不用再计算一次if&nbsp;v,&nbsp;ok&nbsp;:=&nbsp;firstmap[x][y];&nbsp;ok&nbsp;{ans&nbsp;+=&nbsp;vcontinue}recs&nbsp;=&nbsp;append(recs,&nbsp;[]int{x,&nbsp;y})curput&nbsp;:=&nbsp;niceput(recs,&nbsp;m)ans&nbsp;+=&nbsp;curputif&nbsp;_,&nbsp;ok&nbsp;:=&nbsp;firstmap[x];&nbsp;!ok&nbsp;{firstmap[x]&nbsp;=&nbsp;make(map[int]int)}firstmap[x][y]&nbsp;=&nbsp;curput//把结果记录在map中}fmt.Println(ans)}
kimariyb:A 了这题,用 python 写的。如果没有超过最大高度,就用最小的当底,如果超过了最大高度,就用最大的当底
投递美团等公司10个岗位
点赞 评论 收藏
分享
小美的简单构造没看明白
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

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