2022.09.01 Bilibili Java开发笔试

好像后端有几套试卷,我和我同学做的都不一样
我的是 “JAVA开发工程师-人事产研组【2023届】

10 分 单选 * 5
20 分 多选 * 5
70 分 编程 * 3

编程题一个链表,两个树
鼠鼠的第三题实在没啥思路,水分提前跑路了。


贴一下第二题代码,感觉写的又臭又长,不知道有没有大佬有更好的解法
public int maxValue(TreeNode root) {
        // 记录每一层能添加的最大值
        int[] change = new int[500001];
        Deque<TreeNode> deque = new ArrayDeque<>();

        // 记录每一层的和
        List<Integer> sum = new ArrayList<>();
        deque.addLast(root);

        // 深度
        int depth = 0;

        while (!deque.isEmpty()) {
            int size = deque.size();
            int curSum = 0, max = 0, min = 0;
            while (size-- > 0) {
                TreeNode cur = deque.pollFirst();
                curSum += cur.val;

                // 判断该节点的子节点交换上来,该层能不能变得更大
                int left = 0, right = 0;
                if (cur.left != null) {
                    left = cur.left.val - cur.val;
                    deque.addLast(cur.left);
                }
                if (cur.right != null) {
                    right = cur.right.val - cur.val;
                    deque.addLast(cur.right);
                }
                max = Math.max(max, Math.max(left, right));
                change[depth] = Math.max(change[depth], max);

                // 判断该节点换到下一层,下一层能不能变得更大
                left = -left;
                right = -right;
                if (cur.left != null) {
                    change[depth + 1] = Math.max(change[depth + 1], Math.max(left, right));
                }
                if (cur.right != null) {
                    change[depth + 1] = Math.max(change[depth + 1], Math.max(left, right));
                }
            }
            sum.add(curSum);
            depth++;
        }
        int max = Integer.MIN_VALUE;
        // 将每层之和,以及能添加的值 取最大值
        for (int i = 0; i < sum.size(); i++) {
            max = Math.max(sum.get(i) + Math.max(0, change[i]), max);
        }
        return max;
    }


#bilibili笔试#
全部评论
第二题层的最大权值怎么做的。 我是层序遍历父节点比较做不出来,只对了36%
2 回复 分享
发布于 2022-09-01 21:30 广东
大佬第二题什么思路啊
1 回复 分享
发布于 2022-09-01 21:03 内蒙古
气死了,本来可以AK的,第三题,树都分隔出来然后存数组里了,但要求排序,排序器逻辑没问题,但死活排不对,过40%。
点赞 回复 分享
发布于 2022-09-01 21:08 福建
大佬能看看哪步有问题吗
点赞 回复 分享
发布于 2022-09-01 21:56 江苏
都不难,做的有点慢了
3 回复 分享
发布于 2022-09-01 21:04 上海
第三个实在是递归不出来,给自己递归麻了。
3 回复 分享
发布于 2022-09-01 21:04 黑龙江
第三题应该是求左右节点 深度,然后用treemap排序,节点个数当key,深度不平衡就拆, 可惜
点赞 回复 分享
发布于 2022-09-01 21:35 辽宁

相关推荐

给我发了笔试链接,想着等晚上回去做,结果还没做流程就终止了
伟大的小黄鸭在学习:我猜就是笔试几乎没用,就是用来给用人部门拖时间复筛简历的,可能用人部门筛到你简历觉得不合适就提前挂了
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
6
6
分享

创作者周榜

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