115. Distinct Subsequences
动态规划,f[i][j] 表示 S 的前 i 位形成 T 的前 j 位的子序列的数目。
时间复杂度 O(m * n),运行时间 19 ms。
1  | class Solution {  | 
123. Best Time to Buy and Sell Stock III
枚举切分点,把股票分成前后两段,计算前后两段中单次买卖获得的最大收益。
时间复杂度 O(n),运行时间 15 ms。
1  | class Solution {  | 
124. Binary Tree Maximum Path Sum
dfs 遍历树,run(x) 函数返回结果为以结点 x 开头的向下延伸的链的最大路径和。
时间复杂度 O(n),运行时间 35 ms。
1  | /**  | 
126. Word Ladder II
bfs 搜索路径。
时间复杂度 O(n ^ 2),运行时间 629 ms。
1  | class Solution {  | 
128. Longest Consecutive Sequence
方法一
哈希,使用 STL 库的 unordered_set 非常方便。
时间复杂度 O(n),运行时间 49 ms。
1  | class Solution {  | 
方法二
参考别人的解法,代码非常简洁,a[i] 表示数字 i 所在的连续区间长度。
时间复杂度 O(n),运行时间 9 ms。
1  | class Solution {  | 
132. Palindrome Partitioning II
动态规划,f[i] 表示 s 的前 i 位的最小划分。
时间复杂度 O(n ^ 2),运行时间 6 ms。
1  | class Solution {  | 
135. Candy
每个小孩得到的糖果数由左边小孩的最少糖果数和右边小孩的最少糖果数决定,变量说明:
limit– 左边小孩的糖果数限制cur– 当前小孩的糖果数
时间复杂度 O(n),运行时间 43 ms。
1  | class Solution {  | 
140. Word Break II
动态规划。
时间复杂度 O(n ^ 2),运行时间 6 ms。
1  | class Solution {  | 
145. Binary Tree Postorder Traversal
dfs 遍历一次即可。
时间复杂度 O(n),运行时间 0 ms。
1  | /**  | 
146. LRU Cache
使用 list 存储最近使用的缓存队列,unordered_map 存储键值和键在队列的位置。
时间复杂度 O(n),运行时间 112 ms。
1  | class LRUCache {  | 
149. Max Points on a Line
对所有点进行两层循环,第一层循环枚举线上的点 i,第二层循环计算其他点对于 i 的斜率,使用 STL 库点 unordered_map 统计,斜率相同的点共线。
时间复杂度 O(n ^ 2),运行时间 9 ms。
1  | /**  | 
154. Find Minimum in Rotated Sorted Array II
二分法。
时间复杂度 O(log(n)),运行时间 6 ms。
1  | class Solution {  | 
164. Maximum Gap
桶排序。
时间复杂度 O(n),运行时间 9 ms。
1  | class Solution {  | 
174. Dungeon Game
二份答案。
运行时间 22 ms。
1  | class Solution {  | 
188. Best Time to Buy and Sell Stock IV
方法一
动态规划,滚动数组节省空间。f[j][i] 表示在前 i 个股票中交易 j 次的最大收益。
时间复杂度 O(n * k),运行时间 6 ms。
1  | class Solution {  | 
方法二
动态规划。f[1][i][j] 表示在前 i 个股票中买入 j 次的最大收益(当前持有股票),f[0][i][j] 表示对应的不持有股票的状态。
时间复杂度 O(n * k),运行时间 6 ms。
1  | class Solution {  |