Find the Duplicate Number 要点:通过Pigeonhole principle对值空间做binary search,具体来说, low,mid,high都是值空间,所以范围是[1,n].注意鸽巢原理是positive:也就是多出来的必有重复.所以如果[1,mid]之间的元素cnt>mid,那么duplicate在[1,mid]内. 那么negative成立吗?也就是说cnt<=mid,[1,mid]就没有duplicate吗?首先鸽巢原理对negative是不适用的,但…
Word Break I/II 现在看都是小case题了,一遍过了.注意这题不是np complete,dp解的time complexity可以是O(n^2) or O(nm) (取决于inner loop是i还是m).所有解的个数是exponential的 (比如"aaaa....", dict="a, aa",每层都有2个选择).以前在amazon onsite遇到过,不过既不是返回True/False,也不是所有解,而是一个解.其实一个解和True/Fals…
Paint House I/II 要点:这题要区分房子编号i和颜色编号k:目标是某个颜色,所以min的list是上一个房子编号中所有其他颜色+当前颜色的cost https://repl.it/Chwe/1 (I) 善用slicing来eliminate list中一点,还有一点好处是不用考虑超越边界了 II:如何从O(nkk)降到O(n*k)? 每次找到上一个房子编号list的的min这个循环如果在每个k都做一遍,肯定是redundant的.其实loop一遍就能找到对所有颜色k需要的min:m…
Graph Valid Tree 要点:本身题不难,关键是这题涉及几道关联题目,要清楚之间的差别和关联才能解类似题:isTree就比isCycle多了检查连通性,所以这一系列题从结构上分以下三部分 given a graph or edges?有可能给点的编号,然后只给edges,这个最适合用union-find.如果用dfs,那么要先转化成adjacent list表示.这样如果直接给的连通关系的graph,那么dfs就比较直接了 isCycle:directed or undirected:…
Zigzag Iterator 要点: 实际不是zigzag而是纵向访问 这题可以扩展到k个list,也可以扩展到只给iterator而不给list.结构上没什么区别,iterator的hasNext和计数殊途同归. 一种方法利用queue,进queue的顺序就是下一个要访问的元素index和v,实际就是level order traversal 另一种是用一个list存每个v的当前位置(or iterator).然后track count:当前列访问完了(即list访问一遍),reset co…
dp/recursion的方式和是不是game无关,和game本身的规则有关:flip game不累加值,只需要一个boolean就可以.coin in a line II是从一个方向上选取,所以1d dp,而coin in a line III是两个方向,所以是2d dp flip game II: . https://repl.it/CeES https://repl.it/CeES/1 (find version) 错误点: minmax game中递归的优化条件是相反的,这题应该是对手F…
(今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted Arrays, Longest Palindromic Substring) 恼人的median of two sorted arrays 前几年google的必考题,现在考的比较少了,思路就是binary search,具体来说, 如果是一个array,因为是sorted,找到第k个元素是tri…
Design Phone Directory 要点:坑爹的一题,扩展的话类似LRU,但是本题的accept解直接一个set搞定 https://repl.it/Cu0j # Design a Phone Directory which supports the following operations: # get: Provide a number which is not assigned to anyone. # check: Check if a number is available…
Two Sum I/II/III 要点:都是简单题,III就要注意如果value-num==num的情况,所以要count,并且count>1 https://repl.it/CrZG 错误点: TLE:defaultdict is slower than normal dict TLE:.keys() copies keys, it's way slower # Design and implement a TwoSum class. It should support the followi…
One Edit Distance 要点:有两种解法要考虑:已知长度和未知长度(比如只给个iterator) 已知长度:最好不要用if/else在最外面分情况,而是loop在外,用err记录mismatch个数,err:0,err:1,有一位mismatch,这时候再if/else分replace or ins,err:2:return False https://repl.it/CquW 错误点:index回移的logic:短的回移,因为每步必向前,所以相当于短的不动,长的动 未知长度:因为两…