1 |
 1. 两数之和 |
将遍历过的数存到HashMap中 |
2 |
 2. 两数相加 |
按序同时迭代两个链表 |
3 |
 3. 无重复字符的最长子串 |
滑动窗口 |
4 |
4. 寻找两个正序数组的中位数 |
|
5 |
 5. 最长回文子串 |
|
6 |
 10. 正则表达式匹配 |
|
7 |
 11. 盛最多水的容器 |
双指针 |
8 |
 15. 三数之和 |
先排序,左右指针指向边界,同时往中间收缩 |
9 |
 17. 电话号码的字母组合 |
|
10 |
 19. 删除链表的倒数第 N 个结点 |
快慢指针,快指先走N步,慢指针再开始走 |
11 |
 20. 有效的括号 |
遇到左括号则入栈匹配的右括号,遇到右括号则判断是否相等 |
12 |
 21. 合并两个有序链表 |
同时遍历两个链表 |
13 |
 22. 括号生成 |
dfs |
14 |
23. 合并K个升序链表 |
|
15 |
31. 下一个排列 |
|
16 |
 32. 最长有效括号 |
|
17 |
33. 搜索旋转排序数组 |
二分法,根据不同情况收缩区间 |
18 |
34. 在排序数组中查找元素的第一个和最后一个位置 |
|
19 |
 39. 组合总和 |
回溯 |
20 |
 42. 接雨水 |
|
21 |
 46. 全排列 |
回溯,使用visited标记使用过的元素 |
22 |
48. 旋转图像 |
先水平翻转,在主对角线翻转 |
23 |
 49. 字母异位词分组 |
字符串变成字符数组,将数组排序后,重新变成字符串 |
24 |
 53. 最大子序和 |
pre = max(pre + x, x); maxAns = max(maxAns, pre); |
25 |
 55. 跳跃游戏 |
能否跳到i,可以变成 j 能否跳到 i |
26 |
56. 合并区间 |
按左边界升序,判断下个区间的左边界是否大于上区间右边界 |
27 |
 62. 不同路径 |
dp[i][j] = dp[i-1][j] + dp[i][j-1] |
28 |
 64. 最小路径和 |
dp[i][j] = Math.min(dp[i-1][j], dp[m][n-1]) +grid[m][n] |
29 |
 70. 爬楼梯 |
dp[i] = dp[i-1] + dp[i-2] |
30 |
 72. 编辑距离 |
|
31 |
 75. 颜色分类 |
左右指针,遇到2则交换到右边,遇到0则交换到左边 |
32 |
76. 最小覆盖子串 |
|
33 |
 78. 子集 |
回溯法,标记已访问的数据 |
34 |
 79. 单词搜索 |
回溯法,从某个点开始,往4个方向遍历,依次寻找字母 |
35 |
 84. 柱状图中最大的矩形 |
|
36 |
 85. 最大矩形 |
|
37 |
94. 二叉树的中序遍历 |
使用栈 |
38 |
 96. 不同的二叉搜索树 |
dp[i] += dp[j - 1] * dp[i - j] |
39 |
98. 验证二叉搜索树 |
二叉树的中序遍历是升序的 |
40 |
101. 对称二叉树 |
递归比较p.left == q.right && p.right == q.left |
41 |
102. 二叉树的层序遍历 |
bfs遍历树,每次将当前层加入列表 |
42 |
104. 二叉树的最大深度 |
bfs遍历树,每次层数加1 |
43 |
105. 从前序与中序遍历序列构造二叉树 |
使用中序遍历找到左右子树,然后使用先序遍历递归 |
44 |
114. 二叉树展开为链表 |
递归 |
45 |
 121. 买卖股票的最佳时机 |
|
46 |
124. 二叉树中的最大路径和 |
|
47 |
128. 最长连续序列 |
排序,计算每个连续序列长度 |
48 |
 136. 只出现一次的数字 |
nums[0] ^= nums[i] a ^ a = 0; a ^ 0 = a |
49 |
 139. 单词拆分 |
dp[j] && wordDictSet.contains(s.substring(j, i)) |
50 |
141. 环形链表 |
遍历链表, 使用HashSet判断是否已经存在即可 |
51 |
142. 环形链表 II |
|
52 |
146. LRU 缓存机制 |
|
53 |
148. 排序链表 |
|
54 |
 152. 乘积最大子数组 |
|
55 |
155. 最小栈 |
两个栈,一个保存数据,一个保存最小值 |
56 |
160. 相交链表 |
嵌套while,外层迭代head1,内存迭代head2 |
57 |
169. 多数元素 |
排序取中间元素 |
58 |
 198. 打家劫舍 |
dp[i] = max(dp[i-1], dp[i-2] + nums[i]) |
59 |
200. 岛屿数量 |
|
60 |
206. 反转链表 |
next = cur.next;cur.next = pre;pre = cur;cur = next; |
61 |
207. 课程表 |
|
62 |
208. 实现 Trie (前缀树) |
|
63 |
215. 数组中的第K个最大元素 |
|
64 |
 221. 最大正方形 |
|
65 |
226. 翻转二叉树 |
|
66 |
234. 回文链表 |
|
67 |
236. 二叉树的最近公共祖先 |
|
68 |
238. 除自身以外数组的乘积 |
|
69 |
239. 滑动窗口最大值 |
|
70 |
240. 搜索二维矩阵 II |
|
71 |
253. 会议室 II |
|
72 |
 279. 完全平方数 |
完全背包问题 |
73 |
283. 移动零 |
|
74 |
287. 寻找重复数 |
|
75 |
297. 二叉树的序列化与反序列化 |
|
76 |
300. 最长递增子序列 |
|
77 |
301. 删除无效的括号 |
|
78 |
 309. 最佳买卖股票时机含冷冻期 |
|
79 |
 312. 戳气球 |
|
80 |
 322. 零钱兑换 |
完全背包问题 |
81 |
 337. 打家劫舍 III |
|
82 |
 338. 比特位计数 |
|
83 |
 347. 前 K 个高频元素 |
遍历一次计算次数,排序获取top K |
84 |
 394. 字符串解码 |
使用栈,遇到右括号则开始出栈,解码当前子串 |
85 |
399. 除法求值 |
|
86 |
406. 根据身高重建队列 |
|
87 |
 416. 分割等和子集 |
|
88 |
437. 路径总和 III |
|
89 |
438. 找到字符串中所有字母异位词 |
|
90 |
448. 找到所有数组中消失的数字 |
|
91 |
461. 汉明距离 |
|
92 |
494. 目标和 |
|
93 |
538. 把二叉搜索树转换为累加树 |
|
94 |
543. 二叉树的直径 |
|
95 |
560. 和为 K 的子数组 |
|
96 |
581. 最短无序连续子数组 |
|
97 |
617. 合并二叉树 |
|
98 |
621. 任务调度器 |
|
99 |
 647. 回文子串 |
|
100 |
 739. 每日温度 |
|