九章高级算法班的最后一课,讲的是follow up问题:
1. Flatten Binary Tree to Linked List: 用递归的方法要好做一些,如果用iterative的方法比较麻烦
2. Flatten List: 用递归的方法会比较好做些
3. Subarray Sum:这道题直接利用前缀和数组就可以了
4. Flatten Nested List Iterator: 要用stack先把list倒过来,然后没遇到一个list就用同样的方法把它倒过来
5. Submatrix Sum: 如果是O(n4)的解法比较简单一些。如果想要O(n3)的复杂度,在确定上下边界后,再利用precompute的col的sum值,来计算差值为0的情况,就和第三题一样了。
6. Continuous Subarray Sum: 如果碰到负数就更新一下start的值
7. Continuous Subarray Sum II: 不是很会,处理这种可循环的数组的几种方法,1. 缺一项,也就是分为取第一个和不取第一个两种情况,2. 求反,如果求最大值,看看能不能转化为最小值, 3. 取倍数,也就是把当前arr扩大一倍再去求,4. 利用deque,如果数组可以删减的话,可以用deque一个一个处理
8. Kth Smallest Number in Sorted Matrix: 用heap倒是好做,不过这题还可以用二分法来做, 按值二分,对于每一个mid,数数小于等于mid值的个数,因为每一行都是排序的,所以对于每一行再做一个二分法bisect_right(row, mid)
9. Subarray Sum Closest: 先计算前缀和,然后排序,然后再依次比较,要用hash来记录每一个前缀和所对应的index
10. Maximum Gap: 利用bucketsort来做,不过即便是如此,还是挺难做的
11. Subarray Sum II:利用正数数组的前缀和数组的单调性,来做二分法,找到左右边界再把长度加入result里
12. Sliding Window Matrix Maximum:
13. Build Post Office: 利用bfs来搜索最短距离
14. Build Post Office II:和上一题很类似