Group Shifted Strings 要点:开始就想到了string之间前后字符diff要相同. 思维混乱的地方:和某个string的diff之间是没有关系的.所以和单个string是否在那个点会出现z->a也没关系. 唯一tricky的地方是z->a的diff为-25,其和1是等价的.同理a->z diff为25,其和-1是等价的.显然差值是+/-26,两个值map到一个value的方法是(x+26)%26,+26是为了变到positive,%26是26循环.实际上可以用26 +…
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:短的回移,因为每步必向前,所以相当于短的不动,长的动 未知长度:因为两…