# 第七十八周ARTS总结

# Algorithm

0ms | 100.00% Run time
39.2MB | 34.28% Memory

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    List<List<Integer>> ans = new ArrayList<>();

    if (root == null) {
        return ans;
    }

    // 当前层
    List<TreeNode> curLevel = new ArrayList<>();

    // 下一层
    List<TreeNode> nextLevel = new ArrayList<>();

    // 是否从左往右
    boolean leftToRight = true;

    curLevel.add(root);

    while (true) {
        if (curLevel.size() == 0) {
            break;
        }

        List<Integer> level = new ArrayList<>();

        if (leftToRight) {
            for (int i = curLevel.size() - 1; i >= 0; i--) {
                TreeNode cur = curLevel.get(i);
                level.add(cur.val);

                if (cur.left != null) {
                    nextLevel.add(cur.left);
                }

                if (cur.right != null) {
                    nextLevel.add(cur.right);
                }
            }
        } else {
            for (int i = curLevel.size() - 1; i >= 0; i--) {
                TreeNode cur = curLevel.get(i);
                level.add(cur.val);

                if (cur.right != null) {
                    nextLevel.add(cur.right);
                }

                if (cur.left != null) {
                    nextLevel.add(cur.left);
                }
            }
        }

        ans.add(level);

        leftToRight = !leftToRight;
        curLevel.clear();
        curLevel.addAll(nextLevel);
        nextLevel.clear();
    }

    return ans;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

2ms | 14.55% Run time
38.8MB | 78.78% Memory

public int maxDepth(TreeNode root) {
    int depth = 0;

    if (root == null) {
        return depth;
    }

    List<TreeNode> curLevel = new ArrayList<>();
    List<TreeNode> nextLevel = new ArrayList<>();

    curLevel.add(root);

    while (curLevel.size() != 0) {
        depth++;

        for (TreeNode treeNode : curLevel) {
            if (treeNode.left != null) {
                nextLevel.add(treeNode.left);
            }

            if (treeNode.right != null) {
                nextLevel.add(treeNode.right);
            }
        }

        curLevel.clear();
        curLevel.addAll(nextLevel);
        nextLevel.clear();
    }

    return depth;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# Review

# Tip

  • 可通过ProcessLifecycleOwner来监听整个APP的生命周期,回到前台、退到后台等
  • 可通过设置windowtype来让弹窗在其他APP上层
  • context.startActivity中的context如果不是Activity,需要添加addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  • filterIsInstance可以根据类型来过滤集合
  • kotlin的难点
    • 不变性思维
    • 空安全思维
    • 表达式思维
    • 函数思维
    • 协程思维

# Share

暂无内容

更新时间: 10/20/2022, 7:04:01 AM