摘要: Game of Life 要点:这题首先要记住题, 具体来说题的核心是什么:即2d处理的两步顺序的矛盾:如果前一步处理了并记录了,那么后面的处理需要的信息就被wipe了。这题处理的方法就是记录的信息要包含修改之前和之后的信息,一共有4种可能情况:live = live, live = dead, d 阅读全文
posted @ 2016-06-17 04:44 absolute100 阅读(98) 评论(0) 推荐(0) 编辑
摘要: Peeking Iterator 要点:想成cache会比较容易理解,要进一步要考虑什么时候put to cache和什么时候invalidate cache, put to cache:peek的时候,如果没在cache中,因为iterator已经移动,直到下一次next,都要在cache中找。 阅读全文
posted @ 2016-06-17 04:42 absolute100 阅读(100) 评论(0) 推荐(0) 编辑
摘要: Move Zeroes 要点:这题2个要点:保持顺序,0要到最后,所以必须从前向后处理。基本的rule就是每遇到一个非0就和下一个位置(必然为0)交换,当然要判断是否当前就是"下一个位置”,这种情况就不用交换了。 facebook还考过一道类似题,不需要0移到后面,也不需要保持顺序,只需要把非0移到 阅读全文
posted @ 2016-06-17 04:41 absolute100 阅读(85) 评论(0) 推荐(0) 编辑
摘要: H Index I/II 要点: 一般规律:参见图 https://snag.gy/apYLHV.jpg:个数i和citations的关系。如果按citations值从大到小排序,越向右citation越小,而i越大。条件的后半部分限制了必须找到i和citations的临界点,也就是第一个i坐标 = 阅读全文
posted @ 2016-06-16 04:46 absolute100 阅读(84) 评论(0) 推荐(0) 编辑
摘要: Single Number III 要点:这题和I一脉相承,从1个不同变成2个不同,其他数是配对。而II是三个重复 逻辑:因为全部数的xor值在其他两两相同值消掉之后,剩下2个异类的xor相当于二者的不同的位。这样可以根据最低不同位把2个不同数选出来:把其他数分成两组再按I的方法选。 阅读全文
posted @ 2016-06-15 04:51 absolute100 阅读(66) 评论(0) 推荐(0) 编辑
摘要: First Bad Version 要点:本质上就是 =的bounded binary search,因为在某一点之后都是bad version,目标是找到起点。 错误点: =并不是(low+high+1)/2,low=mid的情况才是,也就是 阅读全文
posted @ 2016-06-15 04:50 absolute100 阅读(97) 评论(0) 推荐(0) 编辑
摘要: Integer to English Words 要点:类似roman to integer,三位一组计算,要点: 要从低位开始,因为不知道最高位实际是哪个位。类似的最高三位可能有短缺位,所以先reverse整个string以便3位一组loop的时候不会漏掉最高位(这个也是错误点)。 错误点: Te 阅读全文
posted @ 2016-06-15 04:49 absolute100 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Add Digits 要点:暴力解肯定是不行的。这题就是一道小学数学题:num = (a + b + c + d + e) + (a 9999 + b 999 + c 99 + d 9),所以两边%9是一样的。这样右边重复这个公式(可以利用(x + y) % z = (x % z + y % z) 阅读全文
posted @ 2016-06-14 04:53 absolute100 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Lowest Common Ancestor of a Binary Tree 要点:这题和Binary Search Tree的版本递归都很简单,问题是如何用iteration来做。BST比较简单,直接沿一条分支搜索即可。而Binary Tree需要用post order traversal的方法 阅读全文
posted @ 2016-06-13 06:01 absolute100 阅读(176) 评论(0) 推荐(0) 编辑
摘要: Ugly Number I/II 要点:I/II之间其实没多大关联,II和Super Ugly Number一样。基本思路就是逐个计算下一个ugly number直到n,用三个指针point2, point3, point5记录前一个 2, 3, 5的位置。如果已经刚刚相乘取得新数,移动到改指针下一 阅读全文
posted @ 2016-06-13 04:57 absolute100 阅读(72) 评论(0) 推荐(0) 编辑
摘要: Binary Tree Paths 要点:题很简单,不过对于递归方式很有启发性: 因为root和子树的处理是不同的(root不用加” "),所以对root要在递归开始之前处理(也就是添加到res),类似于array中0单拿出来。 因为leaf node有两个分支,如果等node为空的时候push s 阅读全文
posted @ 2016-06-13 04:56 absolute100 阅读(103) 评论(0) 推荐(0) 编辑
摘要: Lowest Common Ancestor of a Binary Tree 要点:这题和Binary Search Tree的版本递归都很简单,问题是如何用iteration来做。BST比较简单,直接沿一条分支搜索即可。而Binary Tree需要用post order traversal的方法 阅读全文
posted @ 2016-06-13 04:55 absolute100 阅读(114) 评论(0) 推荐(0) 编辑
摘要: Valid Anagram 要点:简单题,但是不要和Anagram那题用同样的方法验证,那题需要多个string之间找anagram,所以要encoding,而这题只是2个之间,就用一个count map然后一个加一个减就可以。为了简化条件,可以用collections.defaultdict(in 阅读全文
posted @ 2016-06-12 05:08 absolute100 阅读(60) 评论(0) 推荐(0) 编辑
摘要: Different Ways to Add Parentheses 要点:这题是另一种递归方式:分治,进一步说是catalan number方式的分治。比较有意思的是和Remove Invalid Parentheses这题的对比,remove里是从左到右递归。首先这题肯定不能这样递归,因为没法同步 阅读全文
posted @ 2016-06-12 05:07 absolute100 阅读(128) 评论(0) 推荐(0) 编辑
摘要: Search a 2D Matrix II 要点:不讨论O(n)算法,O(lgn)的算法可以用四分法,每次可以去掉2个象限,如何想是哪两个?按照递增的顺序,如图。注意这题的binary search部分不是search target或者 =target, 而是普通的binary search,只是在 阅读全文
posted @ 2016-06-12 05:06 absolute100 阅读(82) 评论(0) 推荐(0) 编辑
摘要: Sliding Window Maximum 要点:这题O(nlgk)的算法很简单,就是用个max heap,当然还有O(n)的算法。具体的就是用deque,deque中maintain从大到小的顺序。显然,deque头就是每个sliding window的max值。这里的问题是移动到下一个元素的时 阅读全文
posted @ 2016-06-12 05:05 absolute100 阅读(96) 评论(0) 推荐(0) 编辑
摘要: Product of Array Except Self 要点:和Candy之类的都是一个路数,注意这题已经限定了n 1,所以不用考虑n 阅读全文
posted @ 2016-06-12 05:04 absolute100 阅读(59) 评论(0) 推荐(0) 编辑
摘要: Delete Node in a Linked List 要点:简单题,把下一个值移到当前值,然后把下一个删除(就是node.next连接到node.next.next) 错误点: 注意不是和最后一个交换,之所以会错是因为要检查node是不是最后一个,只有不是队尾才能这么做 不是循环左移,O(1)就 阅读全文
posted @ 2016-06-12 05:03 absolute100 阅读(89) 评论(0) 推荐(0) 编辑
摘要: Palindrome Linked List 要点:暴力解,找到中点,然后reverse后半段,再从两边向中间比较。 错误点: reverse中pre初始为None而不是slow:因为有可能odd或者even,所以从两边向中间可能left.next==right或者left==right。第一种情况 阅读全文
posted @ 2016-06-12 05:02 absolute100 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Number of Digit One 要点:从低到高每一位累加,需要highbits,lowbits,base。基本的rule是每隔base会有1个one,一共多少个base?有3种情况 1, ==1, 1有highbits+1,0,而不是n highbits/lowbits/curbit要在lo 阅读全文
posted @ 2016-06-12 05:01 absolute100 阅读(80) 评论(0) 推荐(0) 编辑
摘要: Power of Two/Power of Three/Power of Four 要点:Two和Four是类似思路,Four扩展到只在偶数位。Three是另一个思路,而这种思路只适用于3为prime:找到小于INT_MAX的最大的3 3 …. 3(3^19),n如果是3^m,那么可以整除这个最大值 阅读全文
posted @ 2016-06-11 05:14 absolute100 阅读(93) 评论(0) 推荐(0) 编辑
摘要: Majority Element II 要点:无论是1个majority,2个majority还是k个,都是三种情况:count+1,all count 1,情况变化发生在0(初始或者减到0)。重要的是三种情况的验证顺序:首先cand已经存在,那么对应count+1,else:检查0,初始化,els 阅读全文
posted @ 2016-06-11 05:13 absolute100 阅读(88) 评论(0) 推荐(0) 编辑
摘要: Basic Calculator I/II 要点:这类题无论怎么变化,都有基本模式:两个stack,一个ops,一个oprand。遇到oprand就push,遇到ops要分情况。 ‘)’:括号里的结束。rewind or keep call computeAndPush ‘(’:just push 阅读全文
posted @ 2016-06-10 05:20 absolute100 阅读(166) 评论(0) 推荐(0) 编辑
摘要: Summary Ranges 要点:简单题,但如果用start标记求解,有一重要点,即最终边界条件是i==n。这里就有一个问题,什么时候用i==n,rule就是看下一段的开始条件和本段的结束条件在哪:如果本段结束等于下一段开始,那么最后的边界条件是i==n(因为这个相当于一个dummy的下一段),本 阅读全文
posted @ 2016-06-10 05:17 absolute100 阅读(72) 评论(0) 推荐(0) 编辑
摘要: Shortest Palindrome TLE:用isPalin function肯定会超时,最好的方法是先reverse string然后再和自身比较 class Solution(object): def shortestPalindrome(self, s): """ :type s: str 阅读全文
posted @ 2016-06-09 05:22 absolute100 阅读(72) 评论(0) 推荐(0) 编辑
摘要: Implement Stack using Queues 要点:因为queue的是FIFO,所以要用2个queue配合来实现LIFO。2种方法:push O(1) or pop O(1)。基本思路就是如果push O(1),那么queue中的元素还是FIFO,pop的时候调整。而pop O(1),在 阅读全文
posted @ 2016-06-07 05:24 absolute100 阅读(188) 评论(0) 推荐(0) 编辑
摘要: Invert Binary Tree 要点:这题很简单,一点点扩展是如果iterative做。pre order还是post order呢?根据recursion,因为既可以先reverse再递归,也可以先递归再reverse,所以没有区别。in order可能也能用,不过会比较复杂。这题说明bin 阅读全文
posted @ 2016-06-07 05:23 absolute100 阅读(87) 评论(0) 推荐(0) 编辑
摘要: Word Search II 要点: board作为visited。为什么dfs最后要unset visited?visited的意义是在当前的dfs stack内,对这题也就是当前path。下一层dfs之后,当前path结果已经得到,但是改点还可能在其他的path上,所以要把visited uns 阅读全文
posted @ 2016-06-06 05:26 absolute100 阅读(99) 评论(0) 推荐(0) 编辑
摘要: Count Complete Tree Nodes 要点:递归的思路 复杂度:因为左右子树最差情况必然一个full一个complete,所以只有一边是继续递归的。另一边下一层就返回了。所以主定理:O(n)=O(n/2)+lgn = O(lgn) O(lgn) 错误点:注意公式:2^h 1, h是bi 阅读全文
posted @ 2016-06-05 05:31 absolute100 阅读(91) 评论(0) 推荐(0) 编辑
摘要: Rectangle Area 要点:基本思路就是先分开算再减去相交部分,这题的难点是如何检查是否相交和如何算出相交部分的面积。 2d转化为1d:x轴和y轴是orthogonal的。可以分开考虑。这样检查不相交很简单,4个or条件。注意x/y轴只要一个不相交就完全没交集 相交部分如何算?还是x/y轴分 阅读全文
posted @ 2016-06-05 05:29 absolute100 阅读(113) 评论(0) 推荐(0) 编辑
摘要: Maximal Square 要点:这题猛一看和Maximal Rectangle很像,其实不然。因为正方形边长相等,实际可以降维。如图,A,B,C三部分构成了除当前点之外正方形的三个部分,所以如果当前点为’1’,那么上面三部分的最小值(其实等同于一边的最小值,所以dp中存的就是一边的长度)为当前点 阅读全文
posted @ 2016-06-05 05:28 absolute100 阅读(82) 评论(0) 推荐(0) 编辑
摘要: The Skyline Problem 要点:这题是难题,但是是重点难题,因为google常考,而且很多变形。题本身的pattern就是从左到右更新区间内存在值的最大值(对于这题就是skyline)。最简单的解法就是从左到右根据每个区间的enter/exit point更新存在值的集合。 同时因为区 阅读全文
posted @ 2016-06-04 05:36 absolute100 阅读(134) 评论(0) 推荐(0) 编辑
摘要: Contains Duplicate I/II/III 要点:I/II都很简单,对于II注意题意是是否在sliding window内存在相等的元素,不是所有相等的都间距小于k。重点说III:对于间距小于k这个条件,还是用sliding window。当检查一个新元素的时候,踢出最老的元素。同时要判 阅读全文
posted @ 2016-06-04 05:35 absolute100 阅读(158) 评论(0) 推荐(0) 编辑
摘要: Add and Search Word Data structure design 要点:类似的题做过n多遍了,不容易记的地方就是call递归函数之前要创建结点表示当前的字符。当递归过界的时候,表示没有当前字符,所以直接返回而不创建+进一步递归 错误点:注意None and如果hit None的br 阅读全文
posted @ 2016-05-29 05:38 absolute100 阅读(98) 评论(0) 推荐(0) 编辑
摘要: Reverse Bits 思路: 错误点:& 没有 / i)!=((n&(1 j): n=n^(1 阅读全文
posted @ 2016-05-25 23:38 absolute100 阅读(114) 评论(0) 推荐(0) 编辑
摘要: Number of 1 Bits 思路: 速度: For example, the 32 bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should retur 阅读全文
posted @ 2016-05-25 23:29 absolute100 阅读(124) 评论(0) 推荐(0) 编辑
摘要: Binary Tree Right Side View 错误点: 是if right... if left,而不是if right elif left,因为有可能右子树向下没有左子树深,所以要左子树也遍历。而控制是否是第一个用的是结果list是否已经有元素。这里容易出错是因为会错认为如果有right 阅读全文
posted @ 2016-05-25 23:12 absolute100 阅读(117) 评论(0) 推荐(0) 编辑
摘要: Largest Number 要点:这题一开始肯定想怎么track每个number从大到小的每一位,这样就把自己绕进去了。正确的方法是把找largest number组合看成几个数的排序,关键是要如何比较两个数。 Given a list of non negative integers, arra 阅读全文
posted @ 2016-05-23 23:57 absolute100 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Repeated DNA Sequences 要点:可以用rolling hash做,不过只beat了7%的python解法,还是用bit数组快。rolling hash还是就用左边高位吧,别老变来变去的,这样每次取余去掉高位。 错误点:rolling hash:rolling的公式可不是+= Al 阅读全文
posted @ 2016-05-23 23:47 absolute100 阅读(115) 评论(0) 推荐(0) 编辑
摘要: Maximum Gap 要点: 问题: 为什么用n(元素个数)作为bucket的个数? 为什么用range公式 Given an unsorted array, find the maximum difference between the successive elements in its so 阅读全文
posted @ 2016-05-23 07:06 absolute100 阅读(100) 评论(0) 推荐(0) 编辑