摘要: Balanced Binary Tree 这题用recursive方法做非常trivial就不说了。试试怎么用itarative的方法,基本就是postorder traversal,局部子树的height可以存在结点map里。在访问结点的时候更新。 postorder iterative trav 阅读全文
posted @ 2016-05-04 09:32 absolute100 阅读(102) 评论(0) 推荐(0) 编辑
摘要: Convert Sorted List to Binary Search Tree 只能顺序访问链表结点,所以不能像array那样preorder的方式建树。而是inorder,因为inorder的顺序和有序的。 每次访问完左子树,这时候的head指向的是当前的root。这时再移动链表指针。 因为p 阅读全文
posted @ 2016-05-04 09:31 absolute100 阅读(78) 评论(0) 推荐(0) 编辑
摘要: Scramble String 这题其实用递归可以不TLE的,主要是有些预判可以剪枝,3d dp的方法就有点繁琐了。 剪枝1:两个string length不相同,返回False 剪枝2:两个string相同,直接返回True 剪枝3:两个string排序,不相同返回False 阅读全文
posted @ 2016-05-04 09:29 absolute100 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 题做多了就会发现这题的code结构和Kth Largest Element in an Array O(n)很像,除了要两边都要recursion而不是一边以外。 通过长度计算index,总是有反向计算公式来验证作为intuition offset的意义:因为offset是当前范围在inorder序 阅读全文
posted @ 2016-05-03 07:33 absolute100 阅读(94) 评论(0) 推荐(0) 编辑
摘要: test 阅读全文
posted @ 2016-05-03 00:26 absolute100 阅读(122) 评论(0) 推荐(0) 编辑
摘要: Same Tree 这题很简单,就是递归,但是因为有null结点,所以是否code能写得很neat是关键。具体来说,就是有一个为null另一个不为null,是false,都为null,true。所以先判断都为null的情况,如果不是,那么知道任何一个为null就返回false。之后就为都为not n 阅读全文
posted @ 2016-05-02 09:39 absolute100 阅读(91) 评论(0) 推荐(0) 编辑
摘要: Interleaving String 这题首先要问的是为什么需要dp呢?如果s1和s2中没有duplicate,那么每次的选择就是唯一的 。但是s1和s2要保持和s3中的order,如果有duplicate并任意选择匹配,另一个数组中可匹配的元素就会被重复元素block住。比如s1=“aa”,s2 阅读全文
posted @ 2016-05-02 09:38 absolute100 阅读(73) 评论(0) 推荐(0) 编辑
摘要: Recover Binary Search Tree 要点:如果两个交换,那么会有两对顺序相反,或者如果是相邻的交换,那么仅有一对。所以第一次发现逆序更新first和second,第二次只更新second in order traversal如何track prev?其实和bst找第k个或者前一个都 阅读全文
posted @ 2016-05-02 09:36 absolute100 阅读(107) 评论(0) 推荐(0) 编辑
摘要: Kth Largest Element in an Array 要点: 基本:用partition来控制order,比如求largest,就逆序partition 为什么起始为k 1要在大端k kth 1(0 started),而起始为k则为k kth(or 1 started) basic fac 阅读全文
posted @ 2016-05-01 06:43 absolute100 阅读(93) 评论(0) 推荐(0) 编辑
摘要: Combination Sum III 这题似乎没什么玄机,和I/II思路类似,而且更简单:输入集合没有重复元素(所以不用考虑duplicate),一个数也不能用多次(所以下层recursion start+1)。 错误点:因为失败返回的条件比较多(len(res) k or sum9也有可能成功, 阅读全文
posted @ 2016-04-30 09:51 absolute100 阅读(120) 评论(0) 推荐(0) 编辑
摘要: Kth Largest Element in an Array 待总结的要点: 为什么起始为k 1(or 0 started)要在大端k kth 1,而起始为k(or 1 started)则为k kth basic fact:不论从0开始还是从1开始计数,任何2个index的差B A都是个数(注意A 阅读全文
posted @ 2016-04-30 09:50 absolute100 阅读(157) 评论(0) 推荐(0) 编辑
摘要: Longest INc 要点: 阅读全文
posted @ 2016-04-30 09:49 absolute100 阅读(96) 评论(0) 推荐(0) 编辑
摘要: Reverse Linked List II 要点:和k group类似,要点上唯一的区别是k group那题如果不够k个结点,不reverse,所以不能one pass,这题可以one pass 已经多次见过了cur,cur.next的模式,cur是pre,cur.next是当前要处理的结点 计数 阅读全文
posted @ 2016-04-29 10:03 absolute100 阅读(121) 评论(0) 推荐(0) 编辑
摘要: Restore IP Addresses 要点:典型的backtrack的题,但是不同的是有一些限制条件可以剪枝。 start =n是中止条件,而层数是成功条件 因为要计算剩余位的长度来剪枝,所以层数在递归中应该是递减的。这样条件就是个数在层数 3和层数 1之间。 1位,2位,3位写成三个并行的情况 阅读全文
posted @ 2016-04-29 10:02 absolute100 阅读(132) 评论(0) 推荐(0) 编辑
摘要: Decode Ways facebook以前特别爱考这题,不知道现在如何了。http://pastebin.com/Yfq8jKq7 (my code: list all possibilities, dp) class Solution(object): def numDecodings(self 阅读全文
posted @ 2016-04-29 10:00 absolute100 阅读(99) 评论(0) 推荐(0) 编辑
摘要: Binary Tree Inorder Traversal 要点:iteration解法更深入考察了结点指针在binary tree层级间的移动规律。 stack用来记录上层未访问的结点,这样之后还可以访问到。而current指针作为一个indicator,如果为null,表示上层结点对应的左子树已 阅读全文
posted @ 2016-04-29 09:59 absolute100 阅读(111) 评论(0) 推荐(0) 编辑
摘要: Unique Binary Search Trees I/II 要点: structurally unique的内涵是什么?输出所有组合时的编号如何处理 对于II,因为需要输出所有,不同区间的输出是不同的。所以要iterate所有区间,在每个区间内,需要用catalan number的iterati 阅读全文
posted @ 2016-04-29 09:58 absolute100 阅读(114) 评论(0) 推荐(0) 编辑
摘要: Word Search 要点:题目不难,但是dfs有很多要素,可以有很多方式组织实现,关键是如何固定实现从而使code的错误最小。 visited要在dfs函数开头set,而在函数结尾reset。同理,当前字符的匹配也在开始 这样看出规律,都是在函数内检查pass in参数的状况,这样是最精简的co 阅读全文
posted @ 2016-04-28 10:10 absolute100 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Gray Code 要点:这题有两个记忆点: 结果可以append到同一个结果list上,只需要在loop确定循环变量的范围 迭代的过程是高位增加一位,为什么初始情况一样?其实高位增加1位即对同位的0+1,开始的时候是[0]就等同于没有低位。 class Solution(object): def 阅读全文
posted @ 2016-04-28 10:09 absolute100 阅读(91) 评论(0) 推荐(0) 编辑
摘要: Partition List 要点:这题的循环条件要用cur.next,why?如果用cur,要维护两个pre,比较麻烦,而用cur.next,cur就是pre了。另一个好处是如果cur.next为null,只有一个结点不需要移动任何结点。 还有一个特殊条件是判断last==cur,这样不移动。凡是 阅读全文
posted @ 2016-04-28 10:08 absolute100 阅读(112) 评论(0) 推荐(0) 编辑
摘要: Minimum Window Substring 要点:同一思路的还有Substring with Concatenation of All Words, Longest Substring with At Most K Distinct Characters。基本要素是found map来记录当前 阅读全文
posted @ 2016-04-27 10:14 absolute100 阅读(66) 评论(0) 推荐(0) 编辑
摘要: Max Rectangle 利用largest rectangle in histogram的方法,这题比较简单。 https://leetcode.com/discuss/97731/solution largest rectangle histogram solved stack simulat 阅读全文
posted @ 2016-04-26 10:22 absolute100 阅读(75) 评论(0) 推荐(0) 编辑
摘要: Largest Rectangle in Histogram 这题就是背吧,实际考的概率比较小,考的时候千万别装逼,直说自己见过。 如何背? 画面感要强 先递增入栈 = 一个低的卡在那,先出栈作为高度,然后栈头作为left = 卡在那的知道又递增了再入栈 最后以n做右边界重复上面低的卡在那的逻辑 E 阅读全文
posted @ 2016-04-26 10:21 absolute100 阅读(113) 评论(0) 推荐(0) 编辑
摘要: Combinations 题目很简单,但是有出错点:loop不是把start append,而是循环变量i 阅读全文
posted @ 2016-04-26 10:20 absolute100 阅读(82) 评论(0) 推荐(0) 编辑
摘要: Remove Duplicates from Sorted List II 要点:在内外两层循环,inner loop用来判断当前点是否有重复,outer loop找下一个判断点。在inner loop单用一个指针是不够的,需要用两个指针,一个沿着重复点移动,一个记录初始点,最后比较是否有移动来判断 阅读全文
posted @ 2016-04-26 10:19 absolute100 阅读(99) 评论(0) 推荐(0) 编辑
摘要: Remove Duplicates from Sorted Array II 错误点 不能swap,而是要只把后面的元素取代前面的。swap将破坏nums[i]!=nums[i 1] check [ ] 要特殊处理,返回0。因为。。。 阅读全文
posted @ 2016-04-26 10:17 absolute100 阅读(94) 评论(0) 推荐(0) 编辑
摘要: Sort Colors 要点:维护左右边界的指针,从左边互换或者本来就在中间,都要接着找下一个。而从右边互换来,不变。 这是因为,处理顺序是从左向右,所以右边的互换来的还没有处理而左边都是处理过的。 这里一个错误点就是左边互换来的也不找下一个。这样的问题是如果左边和当前正好是同一个位置(这种情况只会 阅读全文
posted @ 2016-04-25 10:29 absolute100 阅读(85) 评论(0) 推荐(0) 编辑
摘要: Super Ugly Number 这题和名字一样恶心。逻辑不好想,也可能我是天生对数的结构不太敏感。但是算法结构很简单,所以建议最好背答案 结构: 维护一个数组:记录每个prime的当前指针,下一个数就是最小的prime指向的数和其乘积。 有可能多个prime都对应min,比如3X5和5X3,所以 阅读全文
posted @ 2016-04-25 10:29 absolute100 阅读(96) 评论(0) 推荐(0) 编辑
摘要: Search a 2D Matrix 考点:方法很简单,对第0列和之后找到的行做两次2分,重点是用第一次二分后low和high的位置来确定行。对于二分没找到的情况:low这时候比high大1,low对应的是 target的元素,high对应的是target: high=mid 1 else: low 阅读全文
posted @ 2016-04-25 10:28 absolute100 阅读(100) 评论(0) 推荐(0) 编辑
摘要: Set Matrix Zeroes 要点:用第一行和第一列来记录本行/列的情况。这里的catch是第一行/列本身的情况会被wipe掉。比如第一行都是1,那么其他列为0会置其为0。这样第一行的信息就没了。用一个变量就可以先记录行列信息。 错误点 这题之所以总是有confusion,是因为在记录的时候用 阅读全文
posted @ 2016-04-25 10:26 absolute100 阅读(108) 评论(0) 推荐(0) 编辑
摘要: Burst Balloons 要点:利用了divide and conquer的方法,开始不是那么容易想出来,因为左右并不是完全分开的。这题的理解点在于把分割点想成在范围(left,right)最后一个burst的气球,因为left和right是exclusive的,那么这个气球带来的价值就是num 阅读全文
posted @ 2016-04-23 10:41 absolute100 阅读(118) 评论(0) 推荐(0) 编辑
摘要: Implement Trie (Prefix Tree) lintcode: http://www.lintcode.com/submission/3111458/ 要点:这题trie的特殊点在字符不是表示在root里,而是在边上。而边是每个树结点上的map来表示的。所以结点是placeholder 阅读全文
posted @ 2016-04-23 10:40 absolute100 阅读(115) 评论(0) 推荐(0) 编辑
摘要: Minimum Size Subarray Sum 要点:O(n)解的基本方法是sliding window,loop到第i个元素表示的值是结尾在i的元素最长序列。所以进入loop首先加上该元素。然后从左边pop 错误点:左边pop是一个while loop而不是仅pop一个元素:可能有一堆小元素进 阅读全文
posted @ 2016-04-23 10:37 absolute100 阅读(80) 评论(0) 推荐(0) 编辑
摘要: Course Schedule I/II 要点: 有向图的topological sort,indegree方法需要图结构吗?需要,因为每层遍历是根据图得到连接关系更新indegree的 图的dfs方法,虽然可以在recursion call之前或者之后更新visited,但是最好统一,这样不会出错 阅读全文
posted @ 2016-04-23 10:36 absolute100 阅读(152) 评论(0) 推荐(0) 编辑
摘要: Sqrt(x) 要点:binary search很容易想,注意corner cases:如果 =2,high的初始值为x/2,所以对x=0 or x=1特殊处理,否则设定x为high初始值会TLE class Solution(object): def mySqrt(self, x): """ :t 阅读全文
posted @ 2016-04-22 10:47 absolute100 阅读(68) 评论(0) 推荐(0) 编辑
摘要: Text Justification 细节实现题,基本结构是逐层填(外循环),maintain每层的start和end:start代表开始点,end在每层开始为start。在内层循环找到本层的end。找法是前向比较。最终end点落在本层end的下一个位置 corner cases以及解法or错误点 阅读全文
posted @ 2016-04-22 10:46 absolute100 阅读(108) 评论(0) 推荐(0) 编辑
摘要: Rotate List 错误点 因为开始要计算结点数,要遍历list,所以顺便先把tail和head连上 因为指针最后要落在最后一个list结点,所以移动n 1步,初始的步数为1(即开始已经计入head)。同理,第二次移动n k 2步到新head的前一个结点,断开 n k%n!=(n k)%n,比如 阅读全文
posted @ 2016-04-21 10:52 absolute100 阅读(73) 评论(0) 推荐(0) 编辑
摘要: Valid Number 要点:用几个boolean flag来区分状态:spa,exp,dot,num。为了简化程序,单向pass开始的空格和’+’/’ ’。这些boolean状态flag只是在之后的main loop里标记状态 spa:用来标记空格不在字符中出现,所以当遇到空格并且spa为Fal 阅读全文
posted @ 2016-04-21 10:51 absolute100 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Permutation Sequence 原理:一个permutation是n位,在第i位的值取决于有多少个i 1位的组合。这i 1位的组合是在高位pick完之后剩下的数中 细节: 不同于decimal,位数是固定的,所以不能用k 0作为循环条件(这样只会选择某几位),而是用for循环。 当i=0的 阅读全文
posted @ 2016-04-21 10:50 absolute100 阅读(108) 评论(0) 推荐(0) 编辑
摘要: Maximum Subarray O(n) solution:local解的核心就是判断是否从当前元素重新开始。如果前一个local值high class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] 阅读全文
posted @ 2016-04-20 10:57 absolute100 阅读(108) 评论(0) 推荐(0) 编辑