随笔分类 - Leetcode
摘要:稍微有那么点意思了,用的DP。 修修改改,居然做出来了。 思路就是N的时候 分别以1,2,3,4...n为ROOT 左边分别有 n 1,n 2...0 0,1,2,3...n 1 DP[n]表示n有几种可能: 0表示null,就1种可能 1也只有1种可能。 所以就是dp左边 dp右边 Java pu
阅读全文
摘要:二刷 2种做法,indegree outdegree是一种。 java public class Solution { public boolean isValidSerialization(String preorder) { if (preorder.length() == 0) return
阅读全文
摘要:和105一样的。。这个是给IN 和 POST POST的最后一个是ROOT 所以就从后找,几乎一样的 二刷。 二刷做的我想打人了。 尝试不建新Array,迭代4个index,结果没找对关系,浪费了好多时间。 最后老老实实重新copyRangeOf了。 感觉直接用INDEX是可以实现的。
阅读全文
摘要:树的题,要记住,树的题一般都有递归做法。。 对于preOrder来说,先遍历ROOT,然后往左,再往右,只能保证第一个是ROOT,其余不一定。 我们就先得到ROOT。 对于inOrder来说,如果找到了ROOT,那么遍历ROOT之前的所有Node都是左边的,之后都是右边的。 所以我们通过preOrd
阅读全文
摘要:这个题我在Hedvig电面的时候是热身题。。iteration and recursion。 recursion的时候我用了个global指针。。对方说不需要的时候,我直接懵逼了,当时脑子一片空白。。 这次做又卡了一下,好奇怪,已经有心理阴影了,这他妈是EAZY难度的啊。。。。 其实可以参考 pos
阅读全文
摘要:好像是 三刷 。 按preOrder的顺序改成一列。 当前指向preOrder的下一个就行了,但是既然是 pre Order, 当前改了之后会影响后边的go deeper 进程。。 所以不妨进入下一个之后,回过头改前面的,这样需要一global prev pointer来记录上一个是啥。。 然后注意
阅读全文
摘要:一个树,从右边看是什么样。 想到的是BFS,把每层最后一个添加到res里。 一刷是用DFS做的,也是蛮惊人的。 有一个全局变量来记录已经添加到第几层了。当前层数如果比全局变量要低,就添加。然后全局 + + 为了保证从右边,所以遍历的时候先遍历right node再left node 第二种做法快一些
阅读全文
摘要:和上一个一样,要在当前层建好下一层的next linked list,便于下次遍历。 用通式写的,感觉是背过答案了。。。
阅读全文
摘要:二刷。 BFS,基本习惯上用Iterative的做法来做,就是QUEUE。 reverse一个LIST的函数是Collections.reverse(list),不是list.reverse()。。那个是StringBuilder。 看一刷说还有Recursivley的做法。 然后试试发现还真行。。
阅读全文
摘要:二刷。 利用Complete Tree的特性,前面N 1层是相等的,可以用POW直接算出来。 主要是最后有可能不完全的一层怎么数。 一刷的办法是每一层都看看,深度,左右相等说明这个点是完全的,用平方算就行,不完全就左+右递归。 Java public class Solution { public
阅读全文
摘要:一刷。。 这个题虽然标记是H,但是写起来不难,不过中间逻辑一开始做得很乱。总体感觉不如刚二刷的333难。。 题里给定义的Path是左 中 右这种连线,有点含糊,其实是说白了就是随便画一条没有分叉的线。。 还是通过Post Order traversal来bottom up解决问题。 我们要传上去的信
阅读全文
摘要:看答案做出来了,其实做的并不好,中间被各种cases虐。 思路其实并不难,in order traversal是肯定的,顺序是从小到大。 当前应该比前一个大,如果cur = root.val) { if (first == null) { first = prev; } if (first != n
阅读全文
摘要:一刷。 这个题发现笔记里没有,只能从LC的存档里找到一刷的做法。 其中while loop是模拟从左志往回到root的过程,最后记录ROOT,就是sub tree的最大值,并且要保证当前subTree的ROOT要小于接下来右支的traversal的所有值。 说白了是用Stack模拟了per orde
阅读全文
摘要:惭愧啊,虽然二刷和一刷思路运行时间都一样,但是二刷代码居然比一刷还繁琐。 二刷傻了,居然分情况讨论有1,2,3个的时候。。其实直接来就行。 三刷。 按divide&conquer里的divide分,最后和一起就行了。 递归,每次选中点M,left subtree (L~(m 1)) right su
阅读全文
摘要:不要被题目迷惑,肯定是要O(N)的时间,在不改变数据结构的情况下。 就是in order traverse,因为是BST,所以遍历顺序是从小到大,遍历的第K个元素就是第K小的。 可以Iteratively,也开始recursively. 至于follow up,无非是如何提供信息,让每次左还是右能做
阅读全文
摘要:递归很简单,不说了。 说说迭代。 逻辑上挺复杂的,看了代码才想出来,需要总结。 inorder traverse的要点在于,只要有left node,就往左走,没有的时候,才访问当前值,然后再以right node为新的开始,继续看是否有left node。 实现起来困难一点。 所有的LEFT NO
阅读全文
摘要:这个题我的笔记里怎么没有记录。。。 至少是三刷了吧。 Recursively就不说了。。 Iteratively就是用Stack模拟recursion里的memory stack的顺序。 Time : O(n) Space : O(n)
阅读全文
摘要:二刷。 先找了一下规律,对于一个点,无非2种情况: PQ在左右两边,那么这个点就是答案 PQ在一边,那么答案啊在另一边上,迭代 Recursively. 然后回头看一刷用迭代做的。 应该可以,就是一层一层的来,找到其中一个的时候看看另一个在不在以当前为ROOT的树上,不在的话倒着找,需要2个队列,一
阅读全文
摘要:刷 July 17 2019 第一反应是每个String都sort一下,然后分类,事实上也是正确的。。 Time: O(n KlgK) Space: O(nk) k = length of word 上面其实没用Anagram的另一个特性, char出现的次数相等就行 ,所以sort的KlgK其实浪
阅读全文
摘要:刷 July 14 2019 还是挺难的,又过了一遍KMP. 最直接的办法是楞做。 abcd = bcd abcd aacecaaa = a aacecaaa 说白了就是找到给定String里面longest palindrome prefix。 怎么找呢? 最直观的做法就是左右同时往中间,扫到相遇
阅读全文

浙公网安备 33010602011771号