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 辽宁

相关推荐

6 6 评论
分享
牛客网
牛客企业服务