04 2016 档案

摘要:Combination Sum III 这题似乎没什么玄机,和I/II思路类似,而且更简单:输入集合没有重复元素(所以不用考虑duplicate),一个数也不能用多次(所以下层recursion start+1)。 错误点:因为失败返回的条件比较多(len(res) k or sum9也有可能成功, 阅读全文
posted @ 2016-04-30 09:51 absolute100 阅读(130) 评论(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 阅读(169) 评论(0) 推荐(0)
摘要:Longest INc 要点: 阅读全文
posted @ 2016-04-30 09:49 absolute100 阅读(101) 评论(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 阅读(128) 评论(0) 推荐(0)
摘要:Restore IP Addresses 要点:典型的backtrack的题,但是不同的是有一些限制条件可以剪枝。 start =n是中止条件,而层数是成功条件 因为要计算剩余位的长度来剪枝,所以层数在递归中应该是递减的。这样条件就是个数在层数 3和层数 1之间。 1位,2位,3位写成三个并行的情况 阅读全文
posted @ 2016-04-29 10:02 absolute100 阅读(139) 评论(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 阅读(105) 评论(0) 推荐(0)
摘要:Binary Tree Inorder Traversal 要点:iteration解法更深入考察了结点指针在binary tree层级间的移动规律。 stack用来记录上层未访问的结点,这样之后还可以访问到。而current指针作为一个indicator,如果为null,表示上层结点对应的左子树已 阅读全文
posted @ 2016-04-29 09:59 absolute100 阅读(119) 评论(0) 推荐(0)
摘要:Unique Binary Search Trees I/II 要点: structurally unique的内涵是什么?输出所有组合时的编号如何处理 对于II,因为需要输出所有,不同区间的输出是不同的。所以要iterate所有区间,在每个区间内,需要用catalan number的iterati 阅读全文
posted @ 2016-04-29 09:58 absolute100 阅读(124) 评论(0) 推荐(0)
摘要:Word Search 要点:题目不难,但是dfs有很多要素,可以有很多方式组织实现,关键是如何固定实现从而使code的错误最小。 visited要在dfs函数开头set,而在函数结尾reset。同理,当前字符的匹配也在开始 这样看出规律,都是在函数内检查pass in参数的状况,这样是最精简的co 阅读全文
posted @ 2016-04-28 10:10 absolute100 阅读(139) 评论(0) 推荐(0)
摘要:Gray Code 要点:这题有两个记忆点: 结果可以append到同一个结果list上,只需要在loop确定循环变量的范围 迭代的过程是高位增加一位,为什么初始情况一样?其实高位增加1位即对同位的0+1,开始的时候是[0]就等同于没有低位。 class Solution(object): def 阅读全文
posted @ 2016-04-28 10:09 absolute100 阅读(101) 评论(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 阅读(123) 评论(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 阅读(72) 评论(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 阅读(81) 评论(0) 推荐(0)
摘要:Largest Rectangle in Histogram 这题就是背吧,实际考的概率比较小,考的时候千万别装逼,直说自己见过。 如何背? 画面感要强 先递增入栈 = 一个低的卡在那,先出栈作为高度,然后栈头作为left = 卡在那的知道又递增了再入栈 最后以n做右边界重复上面低的卡在那的逻辑 E 阅读全文
posted @ 2016-04-26 10:21 absolute100 阅读(119) 评论(0) 推荐(0)
摘要:Combinations 题目很简单,但是有出错点:loop不是把start append,而是循环变量i 阅读全文
posted @ 2016-04-26 10:20 absolute100 阅读(89) 评论(0) 推荐(0)
摘要:Remove Duplicates from Sorted List II 要点:在内外两层循环,inner loop用来判断当前点是否有重复,outer loop找下一个判断点。在inner loop单用一个指针是不够的,需要用两个指针,一个沿着重复点移动,一个记录初始点,最后比较是否有移动来判断 阅读全文
posted @ 2016-04-26 10:19 absolute100 阅读(108) 评论(0) 推荐(0)
摘要:Remove Duplicates from Sorted Array II 错误点 不能swap,而是要只把后面的元素取代前面的。swap将破坏nums[i]!=nums[i 1] check [ ] 要特殊处理,返回0。因为。。。 阅读全文
posted @ 2016-04-26 10:17 absolute100 阅读(97) 评论(0) 推荐(0)
摘要:Super Ugly Number 这题和名字一样恶心。逻辑不好想,也可能我是天生对数的结构不太敏感。但是算法结构很简单,所以建议最好背答案 结构: 维护一个数组:记录每个prime的当前指针,下一个数就是最小的prime指向的数和其乘积。 有可能多个prime都对应min,比如3X5和5X3,所以 阅读全文
posted @ 2016-04-25 10:29 absolute100 阅读(102) 评论(0) 推荐(0)
摘要:Sort Colors 要点:维护左右边界的指针,从左边互换或者本来就在中间,都要接着找下一个。而从右边互换来,不变。 这是因为,处理顺序是从左向右,所以右边的互换来的还没有处理而左边都是处理过的。 这里一个错误点就是左边互换来的也不找下一个。这样的问题是如果左边和当前正好是同一个位置(这种情况只会 阅读全文
posted @ 2016-04-25 10:29 absolute100 阅读(95) 评论(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 阅读(117) 评论(0) 推荐(0)
摘要:Set Matrix Zeroes 要点:用第一行和第一列来记录本行/列的情况。这里的catch是第一行/列本身的情况会被wipe掉。比如第一行都是1,那么其他列为0会置其为0。这样第一行的信息就没了。用一个变量就可以先记录行列信息。 错误点 这题之所以总是有confusion,是因为在记录的时候用 阅读全文
posted @ 2016-04-25 10:26 absolute100 阅读(120) 评论(0) 推荐(0)
摘要:Burst Balloons 要点:利用了divide and conquer的方法,开始不是那么容易想出来,因为左右并不是完全分开的。这题的理解点在于把分割点想成在范围(left,right)最后一个burst的气球,因为left和right是exclusive的,那么这个气球带来的价值就是num 阅读全文
posted @ 2016-04-23 10:41 absolute100 阅读(124) 评论(0) 推荐(0)
摘要:Implement Trie (Prefix Tree) lintcode: http://www.lintcode.com/submission/3111458/ 要点:这题trie的特殊点在字符不是表示在root里,而是在边上。而边是每个树结点上的map来表示的。所以结点是placeholder 阅读全文
posted @ 2016-04-23 10:40 absolute100 阅读(128) 评论(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 阅读(86) 评论(0) 推荐(0)
摘要:Course Schedule I/II 要点: 有向图的topological sort,indegree方法需要图结构吗?需要,因为每层遍历是根据图得到连接关系更新indegree的 图的dfs方法,虽然可以在recursion call之前或者之后更新visited,但是最好统一,这样不会出错 阅读全文
posted @ 2016-04-23 10:36 absolute100 阅读(160) 评论(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 阅读(71) 评论(0) 推荐(0)
摘要:Text Justification 细节实现题,基本结构是逐层填(外循环),maintain每层的start和end:start代表开始点,end在每层开始为start。在内层循环找到本层的end。找法是前向比较。最终end点落在本层end的下一个位置 corner cases以及解法or错误点 阅读全文
posted @ 2016-04-22 10:46 absolute100 阅读(120) 评论(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 阅读(77) 评论(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 阅读(136) 评论(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 阅读(119) 评论(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 阅读(112) 评论(0) 推荐(0)
摘要:Length of Last Word 这题很容易去找最后word的start和end,这样可以做,但是增加了code的复杂性(因为有可能只有一个字符,这样两边都要检查越界)。最好只找start,因为start可以reset len,然后len可以在非空格处累加。找start(或者找end)用到的方 阅读全文
posted @ 2016-04-20 10:56 absolute100 阅读(109) 评论(0) 推荐(0)
摘要:N Queens II 如果和N Queens I一样用dfs的方法,注意因为python或者java是pass by value,所以用返回值返回count。这里如何返回和累加容易搞混:因为dfs是树形结构,所以只在找到一个结果后(或者leaf结点)返回1,上层做累加,直到return back到 阅读全文
posted @ 2016-04-20 10:55 absolute100 阅读(93) 评论(0) 推荐(0)
摘要:Insert Interval 虽然现在看算法很简单,但是实现比较tricky,另外算法背后的逻辑比较不容易想。 记忆要点: 1. 因为interval list已经是排好序的了,核心就是顺序比较当前的interval和newInterval。主要分成两种情况:newInterval可以直接插入或者 阅读全文
posted @ 2016-04-19 11:02 absolute100 阅读(87) 评论(0) 推荐(0)
摘要:N Queen I 错误点: 两个点在对角线上的比较条件:x坐标差和y坐标差相等 在判断当前行和列是否valid的loop里不要做dfs 因为是返回所有有效解,所以dfs为True不立即return,pass around结果list,在内层更新 python string和java string一 阅读全文
posted @ 2016-04-19 11:01 absolute100 阅读(91) 评论(0) 推荐(0)
摘要:Pow(x, n) recursion的方法很直观,这题难想的是如何用iteration来解。iteration解法的逻辑有两点,一是利用公式x^n = x^(2 n/2) = (x^2)^(n/2),所以每次阶数减半,而基数增倍。第二,如果阶数不是even,结果要提前乘上多余的部分。最终阶数会减到 阅读全文
posted @ 2016-04-18 11:06 absolute100 阅读(107) 评论(0) 推荐(0)
摘要:Group Anagrams 在当下绝对是简单题了,uber考过要求不用sort string实现,可以统计字符个数encode。比如aabd=a2b1d1,用数组表示hash表。这题python实现有个catch,因为input是strs,很容易用str作为单个string的表示。这样hide了s 阅读全文
posted @ 2016-04-18 11:05 absolute100 阅读(107) 评论(0) 推荐(0)
摘要:Longest Increasing Subsequence leetcode上这道题目本身不难,虽然有,但是O(n^2)的dp足够应付面试了。 补充 4/30/16 google考这题增加了不少扩展: 如何print一个longest的结果:这个我们可以用dp的回溯,需要另一个数组记录每步的选择点 阅读全文
posted @ 2016-04-17 11:18 absolute100 阅读(118) 评论(0) 推荐(0)
摘要:Range Sum Query Mutable 要点:一道segment tree题,segment tree的结构要点是完全binary tree的下一层二分上一层的区间。对于这道题,要实现buildTree, sumQuery和update methods。 buildTree: 注意叶结点实际 阅读全文
posted @ 2016-04-17 11:17 absolute100 阅读(147) 评论(0) 推荐(0)
摘要:Minimum Height Trees 要点:这题实质是topological sort。重点是这是对无向图,和有向图的几点区别: 不需要indegree,因为无向图入度和出度是相同的,所以邻接点的个数就能表示。下一层某结点只需要从adjSet中删除当前层结点即可 因为至少有degree 1,所以 阅读全文
posted @ 2016-04-17 11:15 absolute100 阅读(97) 评论(0) 推荐(0)
摘要:Additive Number 要点:基本是道实现题,主要看错误点 错误点: 最内循环的结构:每次计算和以后都有一个新结果,比较新结果和当前下标下的,这样不断的roll over。这里用了先比较再更新的下标更新方式。最终如果更新后下标超出,说明找到解,如果在比较的时候超出string长度范围,则当前 阅读全文
posted @ 2016-04-17 11:14 absolute100 阅读(114) 评论(0) 推荐(0)
摘要:Isomorphic Strings 要点:一道简单题,要点就是map不是bijection的,所以要用两个map来表示bijection 阅读全文
posted @ 2016-04-17 11:12 absolute100 阅读(124) 评论(0) 推荐(0)
摘要:Count Primes 要点:sieve of eratosthenes: 两层loop在区间里统计上去。如果已知一个prime,在内层loop可以进一步证伪在区间内从这个prime开始的其他数,凡是so far没有被证伪的,都可以确认为prime(外层loop)。 错误点 外层loop只需要到s 阅读全文
posted @ 2016-04-16 11:22 absolute100 阅读(98) 评论(0) 推荐(0)
摘要:Best Time to Buy and Sell Stock with Cooldown 要点:这题就是house robber的变形,buy/sell来记录,一个trick是buy就是profit损失,这样后面的sell就能catch up。另外,这里cooldown体现在buy的递推式:取se 阅读全文
posted @ 2016-04-16 11:21 absolute100 阅读(109) 评论(0) 推荐(0)
摘要:Jump Game II 要点:dp比较容易想,但更好的办法是1d bfs,因为每一步可以走任何小于步长上限的步数。对应的边界是连续扩大的。所以如果边界超过终点,就能得到步数。 start和end的关系:end表示上一轮能reach到的点,内循环的start将走到上上一轮end,也就是已经检查过的点 阅读全文
posted @ 2016-04-15 11:30 absolute100 阅读(124) 评论(0) 推荐(0)
摘要:Multiply Strings 要点:基本公式就是从低位开始(或者string的高index)两层loop:i,j乘积对应的位置是i+j+1(比如0,0,的位置是1,这里0的位置是进位。另外一定要有高位在0的sense)。 错误点: j是下位乘数的index,因为有进位,所以j要超出0,要更新j 阅读全文
posted @ 2016-04-15 11:29 absolute100 阅读(87) 评论(0) 推荐(0)
摘要:Trapping Rain Water 要点:很多题都是这种pattern,就是根据限定条件从两边扫描,然后比较取最终值,注意leetcode的靠前的难题到现在其实就是简单题。 错误点: left数组中第i个存的一定是在对应i这个点的左边值,而不是在i 1存这个值,所以在边界上是0 用和原数组同样长 阅读全文
posted @ 2016-04-15 11:28 absolute100 阅读(126) 评论(0) 推荐(0)
摘要:First Missing Positive 要点:因为值是range固定的,所以利用了slot的index作为mark。注意内循环的条件是目标的value和index不匹配而不是当前值所在slot的index,因为当前slot对应的值可能不存在,就算存在,也应该由其他slot移动过来。 错误点: 阅读全文
posted @ 2016-04-15 11:27 absolute100 阅读(101) 评论(0) 推荐(0)
摘要:Wildcard Matching 要点: 基本code pattern是以待匹配string s为中心loop,一旦没有任何p的分支match,返回false。如果所有s匹配了,还要检查是不是p也exhausted,一种分支是剩下的p是’ ’,这样也可以匹配。 worst case: s: abc 阅读全文
posted @ 2016-04-15 11:26 absolute100 阅读(107) 评论(0) 推荐(0)
摘要:Wildcard Matching 要点: 基本code pattern是以待匹配string s为中心loop,一旦没有任何p的分支match,返回false。如果所有s匹配了,还要检查是不是p也exhausted,一种分支是剩下的p是’ ’,这样也可以匹配。 worst case: s: abc 阅读全文
posted @ 2016-04-15 06:23 absolute100 阅读(100) 评论(0) 推荐(0)
摘要:Search for a Range 这两题的考点都是bounded binary search (i.e., or =), 程序结构要点: mid的更新在loop的最后,所以开始要初始化 条件是low=: [4], mid==0, low==0, high==0, target=3, 因为循环后l 阅读全文
posted @ 2016-04-14 11:45 absolute100 阅读(123) 评论(0) 推荐(0)
摘要:Combination Sum II 要点 错误点: 对于unlimited那题,因为不可能有负数和正数(这样会出现无限解),所以target=n or target 阅读全文
posted @ 2016-04-14 11:36 absolute100 阅读(103) 评论(0) 推荐(0)
摘要:Combination Sum class Solution(object): def combinationSum(self, candidates, target): """ :type candidates: List[int] :type target: int :rtype: List[L 阅读全文
posted @ 2016-04-14 11:35 absolute100 阅读(111) 评论(0) 推荐(0)
摘要:Count and Say 要点:考点就是count和duplicate的code pattern:如果基本条件判断nums[i]和nums[i+1],那么要loop从0到n 1,但最后一个元素特殊处理:这种情况和不相等同样处理。如果是判断nums[i]和nums[i 1],那么要loop从1到n, 阅读全文
posted @ 2016-04-14 11:34 absolute100 阅读(108) 评论(0) 推荐(0)
摘要:Sudoku Solver 要点: 和8 queen类似,dfs,同时要maintain row,column,box表示每个点所在的row,column和box的当前状态。本质是set,但是因为值是固定的,所以boolean array就可以,每个slot对应一个value 因为递归过程中要res 阅读全文
posted @ 2016-04-14 11:33 absolute100 阅读(143) 评论(0) 推荐(0)
摘要:Search Insert Position 阅读全文
posted @ 2016-04-13 11:43 absolute100 阅读(91) 评论(0) 推荐(0)
摘要:Search in Rotated Sorted Array 基本思路:根据mid的位置可以把rotated array分成两部分:顺序的和保持rotated,然后判断target的位置。target落入顺序部分的边界条件很简单,所以作为if部分。死记:mid比较在外,target比较在里。 错误点 阅读全文
posted @ 2016-04-13 11:42 absolute100 阅读(113) 评论(0) 推荐(0)
摘要:Longest Valid Parentheses 错误点: 遇到’)’后pop()的 阅读全文
posted @ 2016-04-13 11:41 absolute100 阅读(95) 评论(0) 推荐(0)
摘要:Next Permutation 要点:从后向前逆序列中第一个正序,然后找到逆序列中比这个数大的下一个来交换 错误点: python的bisect需要正向sorted的array,所以先reverse再binary search 最后一个permutation的下一个是正向第一个,只做reverse 阅读全文
posted @ 2016-04-13 11:40 absolute100 阅读(92) 评论(0) 推荐(0)
摘要:Substring with Concatenation of All Words 要点:用map对words计数,founds表示已经匹配的,patterns表示总共的。从左边words长度内的每一个点作为开始点,用sliding window来找到符合条件的串(记录start,根据当前的匹配情况 阅读全文
posted @ 2016-04-12 11:48 absolute100 阅读(146) 评论(0) 推荐(0)
摘要:Reverse Nodes in k Group 思路:这题最主要是犁清对每组操作的时更新链表指针的顺序。对每个group要记录pre,cur,tail。一种错误的记忆是仿照reverse把cur.next=pre。实际中只有group内reverse,对group外(i.e., pre和tail. 阅读全文
posted @ 2016-04-11 11:51 absolute100 阅读(109) 评论(0) 推荐(0)
摘要:generate parentheses 思路:递归,def generateRec(n, diff, res, solutions): n: 待生成的左右括号组,diff:左右括号的个数差,遵循单向recursion的基本模式即可 阅读全文
posted @ 2016-04-11 11:50 absolute100 阅读(96) 评论(0) 推荐(0)
摘要:Swap Nodes in Pairs 阅读全文
posted @ 2016-04-11 11:50 absolute100 阅读(99) 评论(0) 推荐(0)
摘要:happy number 错误点 loop中什么时候加入set?check之后update:loop invariant==check,加入set==update。所以一定要在loop中首先加入set 阅读全文
posted @ 2016-04-10 11:58 absolute100 阅读(95) 评论(0) 推荐(0)
摘要:Bitwise AND of Numbers Range 思路: range内的数增量的特点是低位变化,高位不变直到进位。另外只要有变化,必然是1和0之间,所以AND肯定为0。所以只有在某个位左边的高位全相同的情况下才可能有AND为1的情况。 细节:只需要比较边界的2个数即可,根据变化规律,中间的数 阅读全文
posted @ 2016-04-10 11:58 absolute100 阅读(109) 评论(0) 推荐(0)
摘要:number of islands 错误点 没检查grid element是否为1,光想着边界检测和visited check了,总共是3个条件 visited check时机?最好是在dfs外面,在dfs里面设为true 小错误:grid的值是字符 阅读全文
posted @ 2016-04-10 11:56 absolute100 阅读(101) 评论(0) 推荐(0)
摘要:Remove Nth Node From End of List 要点 first和second指针的距离:n是从1开始计数的,所以second指向的node和被删的node之间共n个node(包括这两个边界node)。first指向被删node的前一个,这样才能进行list node的删除 根据上 阅读全文
posted @ 2016-04-09 12:04 absolute100 阅读(114) 评论(0) 推荐(0)
摘要:Letter Combinations of a Phone Number 这题iterate方法的基本思路就是连续做+1,+1的含义就是移动同一数字对应字母下一个index处。算法是两层循环,外层是每一个输出,内层是一个数的每一位。难点是循环的invariant:外层是carry!=1,因为如果内 阅读全文
posted @ 2016-04-09 12:03 absolute100 阅读(112) 评论(0) 推荐(0)
摘要:House Robber I/II/III 这题代表了单向线性dp的基本pattern: build local best value at each element and track the global optimal. 这题的要点是local是前k个房间的最优解,这个解不一定要选第k个房间。 阅读全文
posted @ 2016-04-09 12:02 absolute100 阅读(111) 评论(0) 推荐(0)
摘要:The Skyline Problem 要点:这题是难题,但是是重点难题,因为google常考,而且很多变形。题本身的pattern就是从左到右更新区间内存在值的最大值(对于这题就是skyline)。最简单的解法就是从左到右根据每个区间的enter/exit point更新存在值的集合。 同时因为区 阅读全文
posted @ 2016-04-09 06:20 absolute100 阅读(108) 评论(0) 推荐(0)
摘要:Permutation Sequence 原理:一个permutation是n位,在第i位的值取决于有多少个i 1位的组合。这i 1位的组合是在高位pick完之后剩下的数中 细节: 低位的个数和哪个数已经pick了是无关的,只有选择具体数时候才有关 不同于decimal,位数是固定的,所以不能用k 阅读全文
posted @ 2016-04-09 06:18 absolute100 阅读(90) 评论(0) 推荐(0)
摘要:Meeting Rooms I/II 要点:这题和skyline类似,利用了interval start有序的特点,从左向右处理,用一个heap来动态表示当前占用rooms的时间段,所以heap的size就是room数。具体来说, heap是end time的min heap,如果新的interva 阅读全文
posted @ 2016-04-09 06:14 absolute100 阅读(150) 评论(0) 推荐(0)
摘要:House Robber I/II/III 这题代表了单向线性dp的基本pattern: build local best value at each element and track the global optimal. 这题的要点是local是前k个房间的最优解,这个解不一定要选第k个房间。 阅读全文
posted @ 2016-04-09 06:08 absolute100 阅读(124) 评论(0) 推荐(0)
摘要:Regular Expression Matching及变形 要点 fb的常考题, uber也考过。 思路: recursion是基本的结构: 假设s为待匹配string, p为pattern. 当前要匹配si和pi位置的char. 因为有 的存在, 自然分成两种case: 就是有 和没有 . 如果 阅读全文
posted @ 2016-04-06 12:06 absolute100 阅读(116) 评论(0) 推荐(0)
摘要:Regular Expression Matching及变形 要点 fb的常考题, uber也考过。 思路: recursion是基本的结构: 假设s为待匹配string, p为pattern. 当前要匹配si和pi位置的char. 因为有 的存在, 自然分成两种case: 就是有 和没有 . 如果 阅读全文
posted @ 2016-04-06 06:28 absolute100 阅读(143) 评论(0) 推荐(0)
摘要:(今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted Arrays, Longest Palindromic Substring) 恼人的median 阅读全文
posted @ 2016-04-05 21:53 absolute100 阅读(489) 评论(0) 推荐(0)
摘要:google onsite系列:走迷宫 原题:matrix迷宫最短路径的扩展,假设小球在确定一个方向后一直走直到碰到障碍物或者到了迷宫的边界才会停下来。只有当小球最终停在出口位置才算走出迷宫,计算最少需要几步走出迷宫。 思路:简单的迷宫最短路径用bfs来遍历。这题的考点是如何把小球的行走方式转换为b 阅读全文
posted @ 2016-04-03 06:33 absolute100 阅读(321) 评论(0) 推荐(0)