2. Reverse Words in a String
注意最后一个单词后面的空格。
4. Max Points on a Line
注意slope为double类型, infinity是slope的一个特殊值。
5. Sort List:
需要注意fast slow pointer在只有两个节点时是否能够将list分成两部分。
6. Insertion Sort List:
注意边界条件。
7. LRU Cache
更新List的同时注意同步更新Hash
8. Binary Tree Postorder Traversal
9. Binary Tree Preorder Traversal
10. Reorder List
注意链表为空的情形,以及注意fast slow pointer在只有两个节点时是否能够将list分成两部分。
13. Word Break II
注意前驱的存储方式。
14. Word Break
注意递减时用j--,不要用成j++
15. Copy List with Random Pointer (未完成)
16. Single Number II
17. Single Number
18. Candy
注意第二次扫描时不要破坏第一次扫描的条件。
19. Gas Station
20. Clone Graph
因为要记录neighbor信息,注意在入栈时访问,而不能在出栈时访问。
21. Palindrome Partitioning II
DP, 注意f[0] = -1
DP or DFS(faster)
BFS 注意enqueue时visit, dequeue时visit会超时。
DFS非递归,注意入栈和出栈的时刻。
25. Longest Consecutive Sequence
unordered_set被修改的情况下利用for...auto进行访问貌似会出错。
26. Word Ladder II
不需要判重的hash,直接将上一层访问过的word从dict中删除即可。
27. Word Ladder
28. Valid Palindrome
注意transform的函数参数
29. Binary Tree Maximum Path Sum
非递归DFS
30. Best Time to Buy and Sell Stock III
分左右两部分,各求差分
31. Best Time to Buy and Sell Stock II
所有大于零的差分相加。
32. Best Time to Buy and Sell Stock
差分数列的最大子段和。
33. Triangle
buttom-up add, then get the top value
36. Populating Next Right Pointers in Each Node II
注意细节
37. Populating Next Right Pointers in Each Node
DP, 需要强化巩固。
39. Flatten Binary Tree to Linked List
递归写法简单,非递归写法有待加强。
40. Path Sum II
41. Path Sum
非递归DFS
42. Minimum Depth of Binary Tree
level traversal
44. Convert Sorted List to Binary Search Tree
buttom up 递归
45. Convert Sorted Array to Binary Search Tree
top down 递归
46. Binary Tree Level Order Traversal II
47. Construct Binary Tree from Inorder and Postorder Traversal
48. Construct Binary Tree from Preorder and Inorder Traversal
49. Maximum Depth of Binary Tree
50. Binary Tree Zigzag Level Order Traversal
51. Binary Tree Level Order Traversal
52. Symmetric Tree
注意开始push root两次。然后每次同时push或pop对称的点。
53. Same Tree
和上一道题思路一样。
54. Recover Binary Search Tree
注意两个broken node相邻的情况。
55. Validate Binary Search Tree
Morris遍历一定要完成,否则树的结构会被破坏。
DP, 注意边界条件。 可以使用滚动数组
57. Unique Binary Search Trees II
Memoization.
58. Unique Binary Search Trees
DP.
59. Binary Tree Inorder Traversal
DFS, 注意IP地址的格式。 IP地址的每一部分如果为0,则必须只有一位‘0’,如果不为0,则不能包含前缀‘0’。
注意细节, reverse函数。
62. Subsets II
DFS,需要强化。
63. Decode Ways
DP
64. Gray Code
找规律。
从后向前merge
66. Scramble String
DP, 注意两个字符串相等的情况需要单独判断。
67. Partition List
注意把right part的next指针设为空。
O(n^3)和O(n^2)两种解法,后者使用stack. 需要强化。
69. Largest Rectangle in Histogram
注意实现的细节。
70. Remove Duplicates from Sorted List II
注意细节,head节点为duplicate的情况。
71. Remove Duplicates from Sorted List
72. Search in Rotated Sorted Array II
注意A[start] == A[mid]的情况。
73. Word Search
DFS(stack or recursion),注意细节,需要强化。
74. Subset
熟练掌握二进制法(非递归,限制条件),增量构造法(递归及非递归),以及位向量法。
75. Combinations
双指针操作。
77. Sort Colors
三指针操作,three-way partition。需要强化。
Binary Search
O(1) space.
注意滚动数组的写法。
81. Simplify Path
使用stack, 注意corner case
82. Climbing Stairs
DP, O(1) space。
83. Sqrt(x)
注意边界条件。Binary search和牛顿法。
85. Plus One
注意细节。
86. Valid Number
state machine,需要强化细节。
87. Add Binary
和add binary类似。
89. Minimum Path Sum
DP + 滚动数组。
90. Unique Paths II
DP+滚动数组,注意细节。
91. Unique Paths
DP+滚动数组,注意细节。
92. Rotate List
注意细节。怎样计算链表长度,怎样断开。
康拓编码,注意s.erase(start,len)
94. Spiral Matrix II
注意每一圈四个方向的start idx 和 end idx
96. Insert Interval
97. Merge Intervals
98. Jump Game
计算每一步可达的最远位置。
99. Spiral Matrix
100. Maximum Subarray
DP, O(N)
101. N-Queens II
DFS (递归和非递归)
102. N-Queens
DFS(递归和非递归)
103. Pow(x, n)
Divide Conquer, 注意边界条件。
104. Anagrams
106.
122. Longest Valid Parentheses
使用 stack 或1-D DP, 需要强化。
123. Next Permutation
注意最大permutation的情况,要回到最小的permutation。
124. Substring with Concatenation of All Words
使用unordered_map来测试,而不能用unordered_set,因为dict中可能有重复的单词。
125. Divide Two Integers
注意符号为负和溢出的情况。
126. Implement strStr()
O(n^2)算法和robin_carp算法。
127.