摘要:
Length of Last Word 这题很容易去找最后word的start和end,这样可以做,但是增加了code的复杂性(因为有可能只有一个字符,这样两边都要检查越界)。最好只找start,因为start可以reset len,然后len可以在非空格处累加。找start(或者找end)用到的方
阅读全文
posted @ 2016-04-20 10:56
absolute100
阅读(105)
推荐(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
阅读(91)
推荐(0)
摘要:
Insert Interval 虽然现在看算法很简单,但是实现比较tricky,另外算法背后的逻辑比较不容易想。 记忆要点: 1. 因为interval list已经是排好序的了,核心就是顺序比较当前的interval和newInterval。主要分成两种情况:newInterval可以直接插入或者
阅读全文
posted @ 2016-04-19 11:02
absolute100
阅读(83)
推荐(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
阅读(87)
推荐(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
阅读(105)
推荐(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
阅读(101)
推荐(0)
摘要:
Longest Increasing Subsequence leetcode上这道题目本身不难,虽然有,但是O(n^2)的dp足够应付面试了。 补充 4/30/16 google考这题增加了不少扩展: 如何print一个longest的结果:这个我们可以用dp的回溯,需要另一个数组记录每步的选择点
阅读全文
posted @ 2016-04-17 11:18
absolute100
阅读(114)
推荐(0)
摘要:
Range Sum Query Mutable 要点:一道segment tree题,segment tree的结构要点是完全binary tree的下一层二分上一层的区间。对于这道题,要实现buildTree, sumQuery和update methods。 buildTree: 注意叶结点实际
阅读全文
posted @ 2016-04-17 11:17
absolute100
阅读(143)
推荐(0)
摘要:
Minimum Height Trees 要点:这题实质是topological sort。重点是这是对无向图,和有向图的几点区别: 不需要indegree,因为无向图入度和出度是相同的,所以邻接点的个数就能表示。下一层某结点只需要从adjSet中删除当前层结点即可 因为至少有degree 1,所以
阅读全文
posted @ 2016-04-17 11:15
absolute100
阅读(93)
推荐(0)
摘要:
Additive Number 要点:基本是道实现题,主要看错误点 错误点: 最内循环的结构:每次计算和以后都有一个新结果,比较新结果和当前下标下的,这样不断的roll over。这里用了先比较再更新的下标更新方式。最终如果更新后下标超出,说明找到解,如果在比较的时候超出string长度范围,则当前
阅读全文
posted @ 2016-04-17 11:14
absolute100
阅读(111)
推荐(0)
摘要:
Isomorphic Strings 要点:一道简单题,要点就是map不是bijection的,所以要用两个map来表示bijection
阅读全文
posted @ 2016-04-17 11:12
absolute100
阅读(121)
推荐(0)
摘要:
Count Primes 要点:sieve of eratosthenes: 两层loop在区间里统计上去。如果已知一个prime,在内层loop可以进一步证伪在区间内从这个prime开始的其他数,凡是so far没有被证伪的,都可以确认为prime(外层loop)。 错误点 外层loop只需要到s
阅读全文
posted @ 2016-04-16 11:22
absolute100
阅读(95)
推荐(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
阅读(103)
推荐(0)
摘要:
Jump Game II 要点:dp比较容易想,但更好的办法是1d bfs,因为每一步可以走任何小于步长上限的步数。对应的边界是连续扩大的。所以如果边界超过终点,就能得到步数。 start和end的关系:end表示上一轮能reach到的点,内循环的start将走到上上一轮end,也就是已经检查过的点
阅读全文
posted @ 2016-04-15 11:30
absolute100
阅读(119)
推荐(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
阅读(84)
推荐(0)
摘要:
Trapping Rain Water 要点:很多题都是这种pattern,就是根据限定条件从两边扫描,然后比较取最终值,注意leetcode的靠前的难题到现在其实就是简单题。 错误点: left数组中第i个存的一定是在对应i这个点的左边值,而不是在i 1存这个值,所以在边界上是0 用和原数组同样长
阅读全文
posted @ 2016-04-15 11:28
absolute100
阅读(123)
推荐(0)
摘要:
First Missing Positive 要点:因为值是range固定的,所以利用了slot的index作为mark。注意内循环的条件是目标的value和index不匹配而不是当前值所在slot的index,因为当前slot对应的值可能不存在,就算存在,也应该由其他slot移动过来。 错误点:
阅读全文
posted @ 2016-04-15 11:27
absolute100
阅读(93)
推荐(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
阅读(101)
推荐(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
阅读(97)
推荐(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
阅读(118)
推荐(0)
摘要:
Combination Sum II 要点 错误点: 对于unlimited那题,因为不可能有负数和正数(这样会出现无限解),所以target=n or target
阅读全文
posted @ 2016-04-14 11:36
absolute100
阅读(101)
推荐(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
阅读(108)
推荐(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
阅读(104)
推荐(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
阅读(136)
推荐(0)
摘要:
Search Insert Position
阅读全文
posted @ 2016-04-13 11:43
absolute100
阅读(90)
推荐(0)
摘要:
Search in Rotated Sorted Array 基本思路:根据mid的位置可以把rotated array分成两部分:顺序的和保持rotated,然后判断target的位置。target落入顺序部分的边界条件很简单,所以作为if部分。死记:mid比较在外,target比较在里。 错误点
阅读全文
posted @ 2016-04-13 11:42
absolute100
阅读(109)
推荐(0)
摘要:
Longest Valid Parentheses 错误点: 遇到’)’后pop()的
阅读全文
posted @ 2016-04-13 11:41
absolute100
阅读(93)
推荐(0)
摘要:
Next Permutation 要点:从后向前逆序列中第一个正序,然后找到逆序列中比这个数大的下一个来交换 错误点: python的bisect需要正向sorted的array,所以先reverse再binary search 最后一个permutation的下一个是正向第一个,只做reverse
阅读全文
posted @ 2016-04-13 11:40
absolute100
阅读(85)
推荐(0)
摘要:
Substring with Concatenation of All Words 要点:用map对words计数,founds表示已经匹配的,patterns表示总共的。从左边words长度内的每一个点作为开始点,用sliding window来找到符合条件的串(记录start,根据当前的匹配情况
阅读全文
posted @ 2016-04-12 11:48
absolute100
阅读(139)
推荐(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
阅读(103)
推荐(0)
摘要:
generate parentheses 思路:递归,def generateRec(n, diff, res, solutions): n: 待生成的左右括号组,diff:左右括号的个数差,遵循单向recursion的基本模式即可
阅读全文
posted @ 2016-04-11 11:50
absolute100
阅读(95)
推荐(0)
摘要:
Swap Nodes in Pairs
阅读全文
posted @ 2016-04-11 11:50
absolute100
阅读(95)
推荐(0)
摘要:
Bitwise AND of Numbers Range 思路: range内的数增量的特点是低位变化,高位不变直到进位。另外只要有变化,必然是1和0之间,所以AND肯定为0。所以只有在某个位左边的高位全相同的情况下才可能有AND为1的情况。 细节:只需要比较边界的2个数即可,根据变化规律,中间的数
阅读全文
posted @ 2016-04-10 11:58
absolute100
阅读(104)
推荐(0)
摘要:
happy number 错误点 loop中什么时候加入set?check之后update:loop invariant==check,加入set==update。所以一定要在loop中首先加入set
阅读全文
posted @ 2016-04-10 11:58
absolute100
阅读(93)
推荐(0)
摘要:
number of islands 错误点 没检查grid element是否为1,光想着边界检测和visited check了,总共是3个条件 visited check时机?最好是在dfs外面,在dfs里面设为true 小错误:grid的值是字符
阅读全文
posted @ 2016-04-10 11:56
absolute100
阅读(98)
推荐(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
阅读(106)
推荐(0)
摘要:
Letter Combinations of a Phone Number 这题iterate方法的基本思路就是连续做+1,+1的含义就是移动同一数字对应字母下一个index处。算法是两层循环,外层是每一个输出,内层是一个数的每一位。难点是循环的invariant:外层是carry!=1,因为如果内
阅读全文
posted @ 2016-04-09 12:03
absolute100
阅读(109)
推荐(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
阅读(103)
推荐(0)
摘要:
The Skyline Problem 要点:这题是难题,但是是重点难题,因为google常考,而且很多变形。题本身的pattern就是从左到右更新区间内存在值的最大值(对于这题就是skyline)。最简单的解法就是从左到右根据每个区间的enter/exit point更新存在值的集合。 同时因为区
阅读全文
posted @ 2016-04-09 06:20
absolute100
阅读(107)
推荐(0)
摘要:
Permutation Sequence 原理:一个permutation是n位,在第i位的值取决于有多少个i 1位的组合。这i 1位的组合是在高位pick完之后剩下的数中 细节: 低位的个数和哪个数已经pick了是无关的,只有选择具体数时候才有关 不同于decimal,位数是固定的,所以不能用k
阅读全文
posted @ 2016-04-09 06:18
absolute100
阅读(83)
推荐(0)