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