Find Bottom Left Tree Value
给一个二叉树, 返回左下的节点的值, 直接层序扫描, 然后最后一层的第一个值肯定就是啦.
给一个二叉树, 返回左下的节点的值, 直接层序扫描, 然后最后一层的第一个值肯定就是啦.
Fib数, 当前数等于前两个数的和, 需要记录一下前两个数即可.
扫雷游戏, 给一个board给一个操作, 问操作过后的board什么样子. 这个就是dfs, 注意一点如果周围有雷, 需要用count记录一下雷数, 然后把count写入board.
二叉树周长, 找到最长的一条路径在二叉树上. 这个路径不一定过root, 也不一定在某节点两侧. 所以我先要写一个找到depth的方法. 然后找每个节点的左边和右边. 最后把所有的结果取max.
给一个string, 问有没有连续三个L或者超过一个A. 超过一个A用boolean判断, 连续三个L用一个counter和prev, prev记录前一个字符, counter记录几次重复.
BST中删除节点, 经典算法: 先BST搜到节点, 然后: 1. 如果左子树是空, 返回右子树. 2. 如果右子树是空, 返回左子树. 3. 两个都不是空的, 找到右子树最左的节点, 赋值给root, 然后继续删除右子树root的当前值.
给一个数组, 返回差最小的两个数, 如果答案不唯一, 返回所有的两个数的数字. 先排序, 然后找到最小差, 然后再扫一边找到答案.
给一个BST, 找其中的绝对值差最小的两个数, 并且返回差值. 这个题因为是bst,所以可以直接转化成排序数组, 然后再做, 讨论有一个解法如下, 是利用边界逐渐靠拢绝对值的方法. 很巧妙.
给一个数组和一个k, 找出数组中有多少个pair, 满足pair的两个数的差是k的. 这个题有些corn care是k是负的..所以要先判断k的值, 然后用一个map做counter,记录数字出现的次数, 然后利用map的key的唯一性, 遍历所有key in keySet. 记录有多少pair. 还需要注意k==0的时候, 同一个数出现两次以上, 也可以作为一个pair.
设计一个TinyURL. 这个设计题的关键是如何打散字符串, 并且还能重新组合起来. 首先用index和revindex来做bimap, 储存url. 然后encode方法中, 先看revindex有没有, 没有的话我们用Math.random打散url作为key, 并且检查index里有没有. decode就是在index里找shortUrl对应的url.