总结的总结第二篇, 覆盖前面八篇中等难度的80题。中等难度一共三百题,现在是总结到了180题。还有120题,希望这月能总结完。八十道题里面总结出28道题要重新复习,我也是醉了。啥也不说,开始做吧。
P.S. 28题实在太多了,而且都是之前不会的题,一天没刷完。
220. Contains Duplicate III: 用bucket的想法来做。
223. Rectangle Area:中心思想是要计算交叉部分的面积
227. Basic Calculator II:遇到特殊字符的时候计算当前的op,并且把特殊字符赋值为op
253. Meeting Rooms II:heap greedy问题,算是新总结出来的一个问题吧
254. Factor Combinations:可以直接变成一道backtracking的题目,可以复用list元素那种,也可以不用预先生成list,直接用while i*i < n: 来循环
255. Verify Preorder Sequence in Binary Search Tree: 这道题实际上考察了如何把preorder的bst sequence变成inorder的顺序
261. Graph Valid Tree: 第一不能有环,第二不能有disjointed
264. Ugly Number II:用heap来做
277. Find the Celebrity: 最大的trick就是从碰到一个i,cele不知道的,就cele = i,直到最后一个,这个就是唯一可能的cele,然后测试一下合法性就可以了。
280. Wiggle Sort: 因为有等号的存在,所以采取greedy的方法,一遍loop就可以了
287. Find the Duplicate Number: 利用一个性质,这个数组中小于k的数等于k个,如果大于k,说明那个值在0~k之间
289. Game of Life: 主要的想法就是00代表die-die,01代表live-live,10代表die-live,11代表live-die
294. Flip Game II: 想法在于,对于player1所能制造的所有情况中,只要有一种情况player2不能赢,那么player1能赢。player2用同样的函数来判断。
298. Binary Tree Longest Consecutive Sequence: 还算是简单的divide and conquer的问题,当时真是状态不好,直接不会做了。
306. Additive Number: 前面的两个值决定了后面所有的值,所有只要loop前面两个值的所有可能性就可以了。
307. Range Sum Query - Mutable: 手写segementree,眼睛都写花了,真是纸上得来终觉浅啊
** 309. Best Time to Buy and Sell Stock with Cooldown:这题的状态非常难搞,多折腾几次有助于对这类状态型dp的理解 **
310. Minimum Height Trees: 从外层朝内层逐步剪枝的方法,类似于拓扑排序。
319. Bulb Switcher:数学题,对于一个灯泡,它的开关次数是成对出现的比如说6,1开,2关,3开,6关。也就是和它的factor有关系,如果一个数是perfect square,比如说9, 那么只有1,3,9三种情况,也就是说只有这种数最后才是开着的,这种数的个数就是int(sqrt(n))
320. Generalized Abbreviation: 这题是个backtracking,是个不太好想的backtracking
323. Number of Connected Components in an Undirected Graph: 又练了一把union-find,初始化m,创建m,然后query m。基本上是这三步骤
324. Wiggle Sort II: 这题想法就是把比较大的值放到靠前的偶数位上,把比较小的值放到靠后的奇数位上去
325. Maximum Size Subarray Sum Equals k: 利用一个hash来记录前缀和和相应的index
331. Verify Preorder Serialization of a Binary Tree:利用一个two_#_in_tail的函数,从stack里挨个pop和push就可以了
332. Reconstruct Itinerary: 先创建一个图,然后从JFK开始,把每一个值都放到stack里去,如果当前的值不在graph里的话,那么就回退,并且把当前值加到res里去。
334. Increasing Triplet Subsequence:三个值不好找,先找两个值的升序列,然后记录最后一个值,作为min_middle,对于每个后来的n都比较一下min_middle。
347. Top K Frequent Elements: 用bucket来做的时候,把每个值的频率作为bucket的index,而值则放入bucket。
351. Android Unlock Patterns: 这题的解法是先记录一个skip的字典,然后针对每一个数字做backtracking就可以了