1. 两数之和:哈希
2. 两数相加:链表模拟, 数学
3. 无重复字符的最长子串:滑动窗口(双指针+哈希)
4. 寻找两个正序数组的中位数:二分查找
5. 最长回文子串:中心扩展法、DP动态规划(区间DP)
6. Z 字形变换:数学(找规律),模拟
7. 整数反转:数学
8. 字符串转换整数 (atoi):模拟(常见解法),字符串(有限自动机)
9. 回文数:双指针
10. 正则表达式匹配:DP动态规划(线性DP)
11. 盛最多水的容器:单调栈、双指针(常见解法)
12. 整数转罗马数字:模拟、打表
13. 罗马数字转整数:模拟、打表
14. 最长公共前缀:排序(字典序)、分治、模拟
15. 三数之和:排序 + 双指针, 类似与四数之和、三数最接近之和
16. 最接近的三数之和:排序 + 双指针
17. 电话号码的字母组合:DFS(回溯)
18. 四数之和:排序 + 双指针(15进化版)
19. 删除链表的倒数第 N 个结点:栈、双指针
21. 合并两个有序链表:双指针(链表),递归和迭代两种方式
22. 括号生成:DFS
23. 合并K个升序链表:分治、优先队列
26. 删除排序数组中的重复项:双指针
27. 移除元素:双指针
28. 实现 strStr():字符串匹配(kmp)
29. 两数相除:二分
30. 串联所有单词的子串:滑动窗口 + 哈希
31. 下一个排列:模拟
32. 最长有效括号:栈、DP动态规划(线性DP)、模拟(不需要额外空间解法)
33. 搜索旋转排序数组:二分查找
34. 在排序数组中查找元素的第一个和最后一个位置:二分查找
35. 搜索插入位置:二分查找
36. 有效的数独:模拟
37. 解数独:DFS(回溯)
38. 外观数列:模拟
39. 组合总和:DFS(回溯)
40. 组合总和 II:DFS(回溯)
41. 缺失的第一个正数:数组(原地置换)
42. 接雨水:单调栈、DP动态规划(递推DP)、双指针(左右最大值)
43. 字符串相乘:模拟
44. 通配符匹配:DP动态规划(线性DP)
45. 跳跃游戏 II:贪心、DP动态规划(线性DP)
46. 全排列:DFS(回溯)
47. 全排列 II:DFS(回溯)
48. 旋转图像:数组(原地置换)
49. 字母异位词分组:排序+map、哈希
50. Pow(x, n):数学(快速幂),迭代和递归两种方法
51. N 皇后:DFS(回溯)
52. N皇后 II:DFS(回溯)
53. 最大子序和:DP动态规划(区间DP)、贪心、滑动窗口
54. 螺旋矩阵:模拟
55. 跳跃游戏:贪心
56. 合并区间:排序
57. 插入区间:模拟
59. 螺旋矩阵 II:模拟
60. 排列序列:数学、DFS(回溯)+剪枝
61. 旋转链表:模拟
62. 不同路径:DP动态规划(计数型DP)、记忆化搜索
63. 不同路径 II:DP动态规划(计数型DP)
64. 最小路径和:DP动态规划(序列DP)
65. 有效数字:模拟、自动机
66. 加一:模拟
67. 二进制求和:模拟、位运算
68. 文本左右对齐:模拟
69. x 的平方根:二分查找、袖珍计算器算法、牛顿迭代
70. 爬楼梯:DP动态规划(计数型DP)、数学(快速幂)
71. 简化路径:栈
72. 编辑距离:DP动态规划(序列DP)
73. 矩阵置零:模拟(标记法)
74. 搜索二维矩阵:二分查找
75. 颜色分类:双指针
76. 最小覆盖子串:滑动窗口
77. 组合:DFS(回溯)
78. 子集:DFS(回溯)
79. 单词搜索:DFS(回溯)
81. 搜索旋转排序数组 II:二分查找(排除有序部分)
83. 删除排序链表中的重复元素:双指针
84. 柱状图中最大的矩形:单调栈
85. 最大矩形:单调栈、动态规划
86. 分隔链表:双指针
87. 扰乱字符串:动态规划(区间DP)
88. 合并两个有序数组:双指针
89. 格雷编码:DFS(回溯)、数学
90. 子集 II:DFS(回溯)
91. 解码方法:DP动态规划(线性DP)
92. 反转链表 II:模拟
93. 复原 IP 地址:DFS(回溯)
94. 二叉树的中序遍历:树的遍历(中序)、递归和迭代两种方法(栈、DFS)
95. 不同的二叉搜索树 II:DFS(回溯)
96. 不同的二叉搜索树:DP动态规划(计数型DP)、数学
97. 交错字符串:DP动态规划(序列DP)
98. 验证二叉搜索树:树的遍历(中序)
99. 恢复二叉搜索树:树的遍历(中序)
100. 相同的树:DFS、BFS
101. 对称二叉树:DFS、BFS
102. 二叉树的层序遍历:树的遍历(DFS、BFS)
103. 二叉树的锯齿形层序遍历:树的遍历(DFS、BFS)
104. 二叉树的最大深度:树的遍历(DFS、BFS)
105. 从前序与中序遍历序列构造二叉树:DFS、树的操作(构造)
106. 从中序与后序遍历序列构造二叉树:DFS、树的操作(构造)
107. 二叉树的层序遍历 II:树的遍历
108. 将有序数组转换为二叉搜索树:树的遍历
109. 有序链表转换二叉搜索树:双指针、树的遍历、分治
110. 平衡二叉树:DFS
111. 二叉树的最小深度:树的遍历
112. 路径总和:DFS(回溯)、BFS、栈
113. 路径总和 II:DFS(回溯)
114. 二叉树展开为链表:树的遍历
115. 不同的子序列:DP动态规划(递推DP)
118. 杨辉三角:模拟、数学、DP动态规划(线性DP)
119. 杨辉三角 II:DP动态规划(线性DP)、模拟
120. 三角形最小路径和:DP动态规划(线性DP)
121. 买卖股票的最佳时机:模拟、DP动态规划(线性DP)
122. 买卖股票的最佳时机 II:DP动态规划(线性DP)、贪心
123. 买卖股票的最佳时机 III:DP动态规划(线性DP)
124. 二叉树中的最大路径和:dfs(需要注意点,小于0直接为0)、DP动态规划(树形DP)
125. 验证回文串:双指针
126. 单词接龙 II:DFS(回溯)、BFS
127. 单词接龙:双向BFS、启发式搜索
128. 最长连续序列:哈希、DP动态规划(线性DP)、并查集
129. 求根节点到叶节点数字之和:DFS、BFS
130. 被围绕的区域:DFS、BFS、并查集
131. 分割回文串:DFS(回溯)(优化:DP动态规划(序列DP)、记忆化搜索)
132. 分割回文串 II:DP动态规划(序列DP)
133. 克隆图:DFS、BFS
134. 加油站:模拟、滑动窗口、贪心
135. 分发糖果:贪心
136. 只出现一次的数字:位运算
137. 只出现一次的数字 II:位运算、自动机、哈希
138. 复制带随机指针的链表:模拟、哈希
139. 单词拆分: DP动态规划(背包DP)
140. 单词拆分 II:DP动态规划(背包DP)、记忆化搜索
141. 环形链表:哈希、双指针(快慢指针)
142. 环形链表 II:哈希、双指针(快慢指针)
143. 重排链表:模拟、双指针
144. 二叉树的前序遍历:树的遍历,分迭代和递归两种方法
145. 二叉树的后序遍历:树的遍历,分迭代和递归两种方法
146. LRU 缓存机制:哈希表 + 双向链表
151. 翻转字符串里的单词:模拟、栈
152. 乘积最大子数组:DP动态规划(区间DP)
155. 最小栈:栈
156. 上下翻转二叉树:模拟
159. 至多包含两个不同字符的最长子串:双指针
160. 相交链表:哈希、双指针
164. 最大间距:排序(基数排序、桶排序)
165. 比较版本号:模拟、双指针
166. 分数到小数:模拟
167. 两数之和 II - 输入有序数组:二分查找、双指针
168. Excel表列名称:数学(进制转换)
169. 多数元素:位运算、哈希、排序、分治、Boyer-Moore 投票算法
171. Excel 表列序号:数学(进制转换)
172. 阶乘后的零:数学(因子分解)
173. 二叉搜索树迭代器:树的遍历
174. 地下城游戏:DP动态规划(线性DP)
179. 最大数:排序(sort应用)
186. 翻转字符串里的单词 II:模拟
187. 重复的DNA序列:滑动窗口、哈希、位运算 (进阶:任意长度)
188. 买卖股票的最佳时机 IV:DP动态规划(线性DP)
189. 旋转数组:数组(原地置换)
190. 颠倒二进制位:位运算、模拟
191. 位1的个数:位运算
198. 打家劫舍:DP动态规划(线性DP)
199. 二叉树的右视图:树的遍历
200. 岛屿数量:DFS、BFS、并查集
201. 数字范围按位与:位运算
202. 快乐数:哈希、双指针、数学
203. 移除链表元素:模拟,分为迭代和递归两种方法
204. 计数质数:打表、埃氏筛、线性筛
205. 同构字符串:哈希
206. 反转链表:模拟(进阶:空间o(1))
207. 课程表:DFS、BFS(拓扑排序)
209. 长度最小的子数组:滑动窗口,前缀和+二分
210. 课程表 II:DFS、BFS(拓扑排序)
212. 单词搜索 II:DFS、字典树+DFS
213. 打家劫舍 II:DP动态规划(边界处理,线性DP)
214. 最短回文串:哈希、字符串匹配(KMP)
215. 数组中的第K个最大元素:排序(TOPK)
216. 组合总和 III:DFS(回溯)、位运算(二进制)
217. 存在重复元素;哈希、排序
218. 天际线问题:扫描线+优先队列
219. 存在重复元素 II:滑动窗口
220. 存在重复元素 III:滑动窗口、桶
221. 最大正方形:DP动态规划(线性DP)
222. 完全二叉树的节点个数:树的遍历
223. 矩形面积:数学(矩阵重叠面积)
225. 用队列实现栈:队列
226. 翻转二叉树:DFS、BFS
228. 汇总区间:模拟
229. 求众数 II:摩尔投票法
230. 二叉搜索树中第K小的元素:树的遍历(中序)
231. 2的幂:位运算(二进制)
233. 数字 1 的个数:数学、DP动态规划(数位DP)
234. 回文链表:模拟(转换为数组)、双指针
235. 二叉搜索树的最近公共祖先:DFS、二叉搜索树性质
236. 二叉树的最近公共祖先:DFS、哈希
238. 除自身以外数组的乘积:模拟(前缀积、后缀积)
239. 滑动窗口最大值:优先队列、单调队列
241. 为运算表达式设计优先级:分治、DP动态规划(区间DP)
242. 有效的字母异位词:排序、哈希
243. 最短单词距离:模拟
244. 最短单词距离 II:哈希
245. 最短单词距离 III:模拟
246. 中心对称数:哈希
247. 中心对称数 II:DP动态规划()
248. 中心对称数 III:DFS、BFS
249. 群组偏移字符串:数学(规律)、哈希
250. 统计同值子树:树的遍历
252. 会议室:排序
253. 会议室 II:排序
254. 因子的组合:DFS(回溯)
255. 验证前序遍历序列二叉搜索树:单调栈
256. 粉刷房子:DP动态规划(序列DP)
257. 二叉树的所有路径:DFS、BFS
258. 各位相加:数学(规律)
259. 较小的三数之和:双指针
260. 只出现一次的数字 III:数学(分组异或)、位运算
263. 丑数:数学
264. 丑数 II:优先队列、DP动态规划(线性DP)
265. 粉刷房子 II:DP动态规划(序列DP)
266. 回文排列:哈希
267. 回文排列 II:DFS(回溯)
268. 丢失的数字:二分查找、排序、哈希、位运算、数学
270. 最接近的二叉搜索树值:二分查找
272. 最接近的二叉搜索树值 II:树的遍历 + 优先队列
274. H 指数:排序
275. H 指数 II:二分查找
276. 栅栏涂色:DP动态规划(计数型DP)
277. 搜索名人:DFS
278. 第一个错误的版本:二分查找
279. 完全平方数:DP动态规划(背包DP)
280. 摆动排序:排序
281. 锯齿迭代器:队列
282. 给表达式添加运算符:DFS(回溯)
283. 移动零:双指针
284. 窥探迭代器:队列
285. 二叉搜索树中的顺序后继:树的遍历
286. 墙与门:DFS、BFS
287. 寻找重复数:二分、位运算(二进制)、双指针(快慢指针)
289. 生命游戏:模拟、位运算
290. 单词规律:哈希
291. 单词规律 II:DFS(回溯)
292. Nim 游戏:数学(推理)、博弈论
293. 翻转游戏:模拟
294. 翻转游戏 II:DFS(回溯)
295. 数据流的中位数:优先队列、双指针
297. 二叉树的序列化与反序列化:DFS、BFS
298. 二叉树最长连续序列:DFS
299. 猜数字游戏:哈希
300. 最长递增子序列:DP动态规划(线性DP)、贪心+二分查找、DP动态规划+二分查找
301. 删除无效的括号:DFS(回溯)、BFS
302. 包含全部黑色像素的最小矩形:DFS、BFS
305. 岛屿数量 II:并查集
306. 累加数:DFS(回溯)
308. 二维区域和检索 - 可变:前缀和
309. 最佳买卖股票时机含冷冻期:DP动态规划(线性DP)
310. 最小高度树:BFS(拓扑)
311. 稀疏矩阵的乘法:模拟
312. 戳气球:记忆化搜索、DP动态规划(区间DP)
313. 超级丑数:DP动态规划(线性DP)
314. 二叉树的垂直遍历:树的遍历
315. 计算右侧小于当前元素的个数:排序(归并)、线段树、树状数组、二叉搜索树
316. 去除重复字母:单调栈
317. 离建筑物最近的距离:BFS
318. 最大单词长度乘积:位运算(位 + 预计算)
319. 灯泡开关:数学
320. 例举单词的全部缩写:位运算、DFS(回溯)
321. 拼接最大数:单调栈
322. 零钱兑换:DP动态规划(背包DP)、记忆化搜索
323. 无向图中联通分量的数目:并查集
324. 摆动排序 II:排序、快速选择+3-way-partition
325. 和等于k的最长子数组长度:前缀和
326. 3的幂:数学、打表、倍数/约数
327. 区间和的个数:排序(归并)、线段树、前缀和+二分
328. 奇偶链表:模拟
329. 矩阵中的最长递增路径:DFS、BFS(拓扑)
330. 按要求补齐数组:贪心
331. 验证二叉树的前序序列化:栈、模拟(计数)
332. 重新安排行程:欧拉路径(Hierholzer 算法)
333. 最大 BST 子树:DFS、DP动态规划(树形DP)
335. 路径交叉:滑动窗口
336. 回文对:字典树、枚举前缀后缀
337. 打家劫舍 III:DP动态规划(树形DP)
338. 比特位计数:位运算(Brian Kernighan 算法)、DP动态规划(线性DP)
339. 嵌套列表权重和:DFS
340. 最长最多K个无重复字符的字符串长度:滑动窗口 + 双指针
341. 扁平化嵌套列表迭代器:DFS、栈
342. 4的幂:位运算(二进制)、数学(取模性质)
343. 整数拆分:DP动态规划(背包DP、递推DP)、数学
344. 反转字符串:双指针
345. 反转字符串中的元音字母:双指针
346. 数据流中的移动平均值:队列
347. 前 K 个高频元素:排序、优先队列
349. 两个数组的交集:哈希、排序+双指针
350. 两个数组的交集 II:哈希、排序+双指针
351. 安卓系统手势解锁:DFS
352. 将数据流变为多个不相交区间:哈希+并查集
353. 贪吃蛇:队列(双端队列)
354. 俄罗斯套娃信封问题:DP动态规划(线性DP)
355. 设计推特:哈希 + 链表
357. 计算各个位数不同的数字个数:DP动态规划(数位DP:力扣)
358. K 距离间隔重排字符串:哈希
359. 日志速率限制器:哈希
360. 有序转化数组:
361. 轰炸敌人:
362. 敲击计数器:
363. 矩形区域不超过 K 的最大数值和:前缀和、二分查找
365. 水壶问题:DFS、数学(贝祖定力)
366. 寻找二叉树的叶子节点:DFS、BFS
367. 有效的完全平方数:二分查找、牛顿迭代法
368. 最大整除子集:DP动态规划(序列DP)
369. 给单链表加一:模拟
370. 区间加法:差分
371. 两整数之和:位运算
372. 超级次方:数学(快速幂)
373. 查找和最小的K对数字:双指针、优先队列
374. 猜数字大小:二分查找
375. 猜数字大小 II:DP动态规划(区间DP)、极小化极大算法
376. 摆动序列:DP动态规划(线性DP)
377. 组合总和 Ⅳ:DP动态规划(01背包)
378. 有序矩阵中第 K 小的元素:排序(堆)、二分、优先队列
379. 电话目录管理系统:哈希
380. O(1) 时间插入、删除和获取随机元素:哈希+动态数组
381. O(1) 时间插入、删除和获取随机元素 - 允许重复:哈希
382. 链表随机节点:蓄水池抽样算法
383. 赎金信:哈希、模拟
384. 打乱数组:模拟、 Fisher-Yates 洗牌算法
386. 字典序排数:DFS
387. 字符串中的第一个唯一字符:哈希、队列
388. 文件的最长绝对路径:模拟(栈)、前缀和
389. 找不同:数学(计数)、数学(求和)、位运算
390. 消除游戏:数学(找规律)
391. 完美矩形:扫描线
392. 判断子序列:双指针、DP动态规划(序列DP)、模拟(预处理+二分)
393. UTF-8 编码验证:位运算、有限状态自动机
394. 字符串解码:栈、DFS
395. 至少有 K 个重复字符的最长子串:分治、滑动窗口
396. 旋转函数:数学(找规律)、模拟(错位相减法)
397. 整数替换:BFS、位运算、数学(找规律)
398. 随机数索引:水塘抽样法
399. 除法求值:并查集、DFS
400. 第 N 位数字:数学(找规律)
401. 二进制手表:位运算(二进制)、DFS(回溯)
402. 移掉 K 位数字:单调栈
403. 青蛙过河:DP动态规划(线性DP)、记忆化搜索(+二分查找)
404. 左叶子之和:DFS、BFS
405. 数字转换为十六进制数:位运算
407. 接雨水 II:优先队列、并查集、最小堆 + 木桶短板
409. 最长回文串:哈心、贪心
410. 分割数组的最大值:DP动态规划(区间DP)、贪心+二分查找。
413. 等差数列划分:DP动态规划(区间DP)、双指针、差分
414. 第三大的数:排序(TOPK)、优先队列
415. 字符串相加:模拟
416. 分割等和子集:DP动态规划(背包DP)
417. 太平洋大西洋水流问题:DFS、BFS
419. 甲板上的战舰:DFS、模拟(战舰头部判断)
420. 强密码检验器:DP动态规划(状压DP)、优先队列
421. 数组中两个数的最大异或值:哈希、字典树
424. 替换后的最长重复字符:双指针
427. 建立四叉树:DFS
428.序列化和反序列化 N 叉树:DFS、树的遍历(层次)
429. N 叉树的层序遍历:DFS、BFS
430. 扁平化多级双向链表:DFS
431. 将 N 叉树编码为二叉树:DFS、BFS
433. 最小基因变化:DFS、BFS
434. 字符串中的单词数:模拟(原地法)
435. 无重叠区间:DP动态规划(序列DP)、贪心
436. 寻找右区间:排序+二分
437. 路径总和 III:DFS、前缀和
438. 找到字符串中所有字母异位词:滑动窗口
440. 字典序的第K小数字:字典树+二分
441. 排列硬币:二分查找
442. 数组中重复的数据:哈希、数组(原地法)
443. 压缩字符串:双指针
444. 序列重建:拓扑
446. 等差数列划分 II - 子序列:DP动态规划(序列DP)+冗斥定理(力扣)
447. 回旋镖的数量:哈希
448. 找到所有数组中消失的数字:数组(原地法)
449. 序列化和反序列化二叉搜索树:BFS、DFS、树的操作(重建)
450. 删除二叉搜索树中的节点:树的操作(删除)
451. 根据字符出现频率排序:排序、模拟(优先队列)
453. 最小操作次数使数组元素相等:数学(找规律)、DP动态规划(线性DP)
454. 四数相加 II:哈希
455. 分发饼干:贪心
456. 132 模式:单调栈
457. 环形数组是否存在循环:双指针(快慢指针)
458. 可怜的小猪:数学(找规律)
459. 重复的子字符串:字符串匹配(KMP)
460. LFU 缓存:哈希表 + 平衡二叉树、双哈希表、桶排序+双向链表
461. 汉明距离:位运算
462. 最少移动次数使数组元素相等 II:数学(中位数)
463. 岛屿的周长:DFS
464. 我能赢吗:DP动态规划(状压DP)
466. 统计重复个数:DP动态规划(序列DP)
467. 环绕字符串中唯一的子字符串:DP动态规划(线性DP)、前缀和
468. 验证IP地址:正则表达式、分治
470. 用 Rand7() 实现 Rand10():拒绝采样
471. 编码最短长度的字符串:DP动态规划(区间DP)
472. 连接词:字典树+DFS、记忆化DFS(DFS+哈希)
473. 火柴拼正方形:DFS(回溯)
474. 一和零:DP动态规划(01背包DP)
475. 供暖器:二分查找、双指针
476. 数字的补数:位运算
477. 汉明距离总和:位运算(二进制)
478. 在圆内随机生成点:数学(拒绝采用)、数学(计算分布函数)
479. 最大回文数乘积:数学
480. 滑动窗口中位数:滑动窗口、双优先队列 + 延迟删除
481. 神奇字符串:模拟
482. 密钥格式化:模拟
483. 最小好进制:数学、二分查找
484. 寻找排列:栈
486. 预测赢家:DP动态规划(区间DP)
487. 最大连续 1 的个数II:滑动窗口
488. 祖玛游戏:DFS(回溯)
489. 扫地机器人:DFS(回溯)
490. 迷宫:DFS、BFS
491. 递增子序列:DFS(回溯)
492. 构造矩形:数学
493. 翻转对:排序(归并)、树状数组
494. 目标和:DFS(回溯)、DP动态规划(01背包DP)、记忆化搜索
495. 提莫攻击:模拟、模拟
496. 下一个更大元素 I:单调栈
497. 非重叠矩形中的随机点:二分查找 + 前缀和
498. 对角线遍历:模拟、数学(对角线迭代和翻转)
499. 迷宫II:BFS
500. 键盘行:模拟
501. 二叉搜索树中的众数:树的遍历(中序),进阶:空间复杂度优化
502. IPO:贪心 + 堆、贪心 + 优先队列
503. 下一个更大元素 II:单调栈
504. 七进制数:数学
505. 迷宫 II:BFS、DFS
506. 相对名次:哈希、排序
507. 完美数:数学(欧拉定理)、模拟(枚举)
508. 出现次数最多的子树元素和:树的遍历 + 哈希
509. 斐波那契数:DP动态规划(计数型DP)、数据(快速幂)、数学(通项公式)
513. 找树左下角的值:树的遍历
514. 自由之路:DP动态规划(区间DP)
515. 在每个树行中找最大值:树的遍历(层次遍历)
516. 最长回文子序列:DP动态规划(区间DP,力扣)、中心扩展
517. 超级洗衣机:贪心
518. 零钱兑换 II:DP动态规划(完全背包DP)
519. 随机翻转矩阵:数学(分块)、数学(二维数组转化为一维数组)
520. 检测大写字母:模拟
521. 最长特殊序列 Ⅰ:数学(推理)
522. 最长特殊序列 II:排序 + 哈希、 模拟
523. 连续的子数组和:前缀和 + 哈希
525. 连续数组:前缀和 + 哈希
526. 优美的排列:DFS(回溯)、DP动态规划(状态压缩DP,力扣)+状态压缩
528. 按权重随机选择:前缀和 + 二分
529. 扫雷游戏:DFS、BFS
530. 二叉搜索树的最小绝对差:树的遍历
532. 数组中的 k-diff 数对:哈希、排序 + 双指针
535. TinyURL 的加密与解密:数学(计数、随机数)、哈希
536. 从字符串生成二叉树:DFS
537. 复数乘法:数学
538. 把二叉搜索树转换为累加树:树的遍历(中序、morris)
539. 最小时间差:数学(转换)
540. 有序数组中的单一元素:二分查找
542. 01 矩阵:DP动态规划(递推DP)、BFS
543. 二叉树的直径:DFS、DP动态规划(树形DP)
546. 移除盒子:DP动态规划(区间DP)
547. 省份数量:DFS、BFS、并查集
548. 将数组分割成和相等的子数组:哈希
552. 学生出勤记录 II:DP动态规划(状压DP)、记忆化搜索、数学(快速幂)
553. 最优除法:贪心、数学
554. 砖墙:哈希
555. 分割连接字符串:
556. 下一个更大元素 III:数学、单调栈
557. 反转字符串中的单词 III:数学(原地法)
558. 四叉树交集:DFS
559. N 叉树的最大深度:树的遍历(DFS、BFS)
560. 和为K的子数组:前缀和 + 哈希
561. 数组拆分 I:贪心(排序)
562. 矩阵中最长的连续1线段:
563. 二叉树的坡度:树的遍历(后续)
565. 数组嵌套:并查集、双指针 + 剪枝
566. 重塑矩阵:模拟、数学(二维数组转化为一维数组)
567. 字符串的排列:滑动窗口、双指针
572. 另一棵树的子树:DFS、哈希(树)
575. 分糖果:哈希、排序、模拟
576. 出界的路径数:DP动态规划(线性DP)、记忆化搜索
581. 最短无序连续子数组:双指针 + 排序、单调栈
583. 两个字符串的删除操作:DP动态规划(序列DP)、数学(最长公共子序列)
587. 安装栅栏:凸包(jarvis算法、Graham 扫描)
589. N 叉树的前序遍历:N叉树的遍历
590. N 叉树的后序遍历:N叉树的遍历
591. 标签验证器:栈 + 模拟、栈 + 状态机
592. 分数加减运算:数学(通分)
593. 有效的正方形:数学(四边形)
594. 最长和谐子序列:预排序 + 双指针、哈希、模拟
598. 范围求和 II:贪心、数学
600. 不含连续1的非负整数:DP动态规划(数位DP)
605. 种花问题:贪心、模拟、数学(计数)
606. 根据二叉树创建字符串:树的遍历(前序)、DFS
611. 有效三角形的个数:排序 + 二分、排序 + 双指针、数学(NTT快速卷积)
617. 合并二叉树:DFS、BFS、树的操作(合并)
621. 任务调度器:模拟、优先队列
622. 设计循环队列:模拟
623. 在二叉树中增加一行:树的遍历(DFS、BFS)
624. 数组列表中的最大距离:数学(推理)
625. 最小因式分解:数学
629. K个逆序对数组:DP动态规划(递推DP) + 前缀和
630. 课程表 III:优先队列 + 贪心
632. 最小区间:哈希 + 滑动窗口、优先队列 + 贪心
633. 平方数之和:二分查找、数学(质因子分解、费马平方和)
637. 二叉树的层平均值:树的遍历(层次)
638. 大礼包:DFS(回溯)、DP动态规划(状压DP)
639. 解码方法 II:DP动态规划(线性DP)
640. 求解方程:数学(拆分方程)、模拟
641. 设计循环双端队列:数组 + 双指针、双链表
643. 子数组最大平均数 I:滑动窗口、前缀和
645. 错误的集合:排序、哈希、位运算、数学
646. 最长数对链:DP动态规划(线性DP)、贪心
647. 回文子串:中心扩展、DP动态规划(序列DP)
648. 单词替换:前缀和 + 哈希、 字典树
650. 只有两个键的键盘:DP动态规划(线性DP)、数学、打表
652. 寻找重复的子树 :DFS(二叉树序列化) + 哈希
653. 两数之和 IV - 输入 BST:哈希、BFS、哈希 + BFS、DFS、哈希 + DFS
654. 最大二叉树:DFS、单调栈、树的操作(构建)
655. 输出二叉树:树的遍历(DFS、BFS)
658. 找到 K 个最接近的元素:滑动窗口、二分查找、数学(删除法)
659. 分割数组为连续子序列:贪心、哈希 + 优先队列(堆)
661. 图片平滑器:模拟
662. 二叉树最大宽度:树的遍历(层次)
664. 奇怪的打印机:DP动态规划(区间DP)
665. 非递减数列:贪心、模拟
666. 路径之和IV:树的遍历(DFS)
667. 优美的排列 II:数学(找规律)
668. 乘法表中第k小的数:二分查找
669. 修剪二叉搜索树:模拟、树的操作(修剪)
670. 最大交换:单调队列、贪心、模拟
671. 二叉树中第二小的节点:树的遍历、递归
672. 灯泡开关 Ⅱ:位运算、记忆化搜索、数学(找规律)
673. 最长递增子序列的个数:DP动态规划(序列DP)、贪心+前缀和+二分
674. 最长连续递增序列:贪心、DP动态规划(线性DP)
675. 为高尔夫比赛砍树:BFS、A*搜索
676. 实现一个魔法字典:字典树、哈希
677. 键值映射:字典树
678. 有效的括号字符串:DP动态规划(线性DP)、栈、贪心、模拟
679. 24 点游戏:DFS(回溯)
680. 验证回文字符串 Ⅱ:双指针
682. 棒球比赛:栈、模拟
683. K 个关闭的灯泡:线段树
684. 冗余连接:并查集
685. 冗余连接 II:并查集
686. 重复叠加字符串匹配:字符串匹配(kmp)
687. 最长同值路径:DFS(递归)、DP动态规划(树形DP)
688. “马”在棋盘上的概率:DP动态规划(递推DP)、数学(快速幂)、DFS(回溯)
689. 三个无重叠子数组的最大和:DP动态规划(递推DP、线性DP) + 前缀和
690. 员工的重要性:DFS、BFS、并查集
691. 贴纸拼词:DFS(回溯)、DP动态规划(状压DP)
692. 前K个高频单词:排序 + 哈希、优先队列
693. 交替位二进制数:数学(除2)、位运算
695. 岛屿的最大面积:DFS、BFS
696. 计数二进制子串:数学(计数)、模拟(按字符分组)
697. 数组的度:哈希
698. 划分为k个相等的子集:DP动态规划(状压DP)、DFS(回溯)【和划分为2个等和的序列需有区分度】
699. 掉落的方块:模拟、数学(平方根分解)
700. 二叉搜索树中的搜索:树的遍历
701. 二叉搜索树中的插入操作:模拟、树的操作(插入)
703. 数据流中的第 K 大元素:优先队列
704. 二分查找:二分查找
705. 设计哈希集合:简单数组
706. 设计哈希映射:简单数组
707. 设计链表:单链表、双链表
709. 转换成小写字母:模拟
710. 黑名单中的随机数:二分查找
711. 不同岛屿的数量 II:DFS、BFS
712. 两个字符串的最小ASCII删除和:DP动态规划(序列DP)
713. 乘积小于K的子数组:二分查找、双指针、滑动窗口
714. 买卖股票的最佳时机含手续费:DP动态规划(线性DP、滚动数组)、贪心
715. Range 模块:线段树、红黑树、有序字典合并
716. 最大栈:栈
718. 最长重复子数组:DP动态规划(序列DP)、滑动窗口、后缀数组
719. 找出第 k 小的距离对:二分查找 + 前缀和、二分查找 + 双指针
720. 词典中最长的单词:哈希、前缀树 + DFS
721. 账户合并:哈希表 + 并查集、并查集、DFS
722. 删除注释:状态机、数学(推理)
723. 粉碎糖果:模拟
724. 寻找数组的中心下标:前缀和、模拟
725. 分隔链表:模拟
726. 原子的数量:栈 + 哈希、模拟
727. 最小窗口子序列:DP动态规划()
728. 自除数:数学、模拟
729. 我的日程安排表 I:平衡树、数学(模拟、边界计算)、线段树、哈希
730. 统计不同回文子序列:DP动态规划(区间DP)
731. 我的日程安排表 II:数学(模拟、边界计算)、二分查找、差分、线段树
732. 我的日程安排表 III:数学(模拟、边界计算)、线段树
733. 图像渲染:DFS、BFS
734. 句子相似性:哈希
735. 行星碰撞:栈、模拟
737. 句子相似性 II:并查集
738. 单调递增的数字:贪心
739. 每日温度:单调栈、模拟
740. 删除并获得点数:DP动态规划(序列DP)、排序 + DP动态规划
741. 摘樱桃:记忆化搜索、DP动态规划(线性DP)
743. 网络延迟时间:图(Dijkstra)、BFS
744. 寻找比目标字母大的最小字母:二分查找
745. 前缀和后缀搜索:字典树、哈希
746. 使用最小花费爬楼梯:DP动态规划(计数型DP)
747. 至少是其他数字两倍的最大数:贪心、模拟
748. 最短补全词:哈希
749. 隔离病毒:模拟、BFS + 并查集、DFS + 优先队列
750. 角矩形的数量:DFS、DP动态规划(线性DP)
752. 打开转盘锁:启发式搜索、BFS
753. 破解保险箱:欧拉路径
754. 到达终点数字:数学(找规律)
755. 倒水:模拟
756. 金字塔转换矩阵:DFS(回溯)、DFS(回溯) + 位运算
762. 二进制表示中质数个计算置位:位运算(汉明重量)
763. 划分字母区间:贪心、哈希
764. 最大加号标志:DP动态规划(线性DP)
765. 情侣牵手:并查集 + 贪心
766. 托普利茨矩阵:模拟
767. 重构字符串:数学(计数) + 贪心、排序、优先队列 + 贪心
768. 最多能完成排序的块 II:滑动窗口、排序 + 数学(计数)
770. 基本计算器 IV:分治、栈
771. 宝石与石头:哈希、正则、位运算、枚举
773. 滑动谜题:BFS、启发式搜索、A*搜索
774. 最小化去加油站的最大距离:二分查找、优先队列
775. 全局倒置与局部倒置:贪心、二分查找、排序
776. 拆分二叉搜索树:树的操作(拆分)、DFS
777. 在LR字符串中交换相邻字符:双指针、数学(推理)
778. 水位上升的泳池中游泳:二分查找、优先队列、并查集
779. 第K个语法符号:数学(找规律)、DP动态规划(线性DP)
780. 到达终点:数学(辗转相除法、取模变体)
781. 森林中的兔子:贪心、数学(找规律)
782. 变为棋盘:数学(分析)
783. 二叉搜索树节点最小距离:树的遍历(中序)
784. 字母大小写全排列:DFS
785. 判断二分图:DFS、BFS、并查集
786. 第 K 个最小的素数分数:分治、二分、优先队列
787. K 站中转内最便宜的航班:记忆化搜索、DP动态规划(区间DP)、BFS + 剪枝
788. 旋转数字:DP动态规划(递推DP)、数学
789. 逃脱阻碍者:数学(曼哈顿距离)
790. 多米诺和托米诺平铺:DP动态规划(计数型DP)、数学(矩阵快速幂)
791. 自定义字符串排序:排序 + 哈希、哈希(统计字符数量重新构造字符串)
792. 匹配子序列的单词数:字典树、二分、哈希 + 桶
793. 阶乘函数后 K 个零:数学(找规律)、数学 + 二分
794. 有效的井字游戏:数学(分析)、模拟
795. 区间子数组个数:DP动态规划(递推DP)、前缀和、数学(计数)、滑动窗口
796. 旋转字符串:字符串匹配(kmp)、数学(判断子串)、穷举法
797. 所有可能的路径:DFS(回溯)、BFS
799. 香槟塔:模拟、DP动态规划(线性DP)
801. 使序列递增的最小交换次数:DP动态规划(线性DP)
802. 找到最终的安全状态:DFS + 三色标记法、拓扑排序
803. 打砖块:并查集、DFS
805. 数组的均值分割:DP动态规划(01背包)、折半搜索 + 归并排序、DFS
807. 保持城市天际线:贪心
808. 分汤:DP动态规划(递推DP)、DFS+memo
809. 情感丰富的文字:模拟、双指针
810. 黑板异或游戏:数学(异或)
811. 子域名访问计数:哈希
812. 最大三角形面积:枚举、数学(海伦公式)
813. 最大平均值和的分组:DP动态规划(区间DP)、记忆化搜索
814. 二叉树剪枝:树的遍历、DFS、树的操作(剪枝)
815. 公交路线:BFS
816. 模糊坐标:枚举、模拟
817. 链表组件:哈希
818. 赛车:DP动态规划(区间DP)、最短路
819. 最常见的单词:哈希、模拟、数学(计数)
820. 单词的压缩编码:字典树、数学(分析)
821. 字符的最短距离:中心扩展法、贪心、数学(窗口划分)
822. 翻转卡片游戏:哈希
823. 带因子的二叉树:DP动态规划(树形DP)、贪心(排序+字典)
824. 山羊拉丁文:模拟
825. 适龄的朋友:数学(计数)、排序 + 二分查找、桶排序
826. 安排工作以达到最大收益:双指针 + 排序
827. 最大人工岛:并查集、DFS
828. 统计子串中的唯一字符:DP动态规划(递推DP)、数学(找规律)
829. 连续整数求和:数学(因式分解)
830. 较大分组的位置:正则、位运算、栈、滑动窗口、模拟
831. 隐藏个人信息:模拟、正则
832. 翻转图像:模拟
833. 字符串中的查找与替换:模拟、贪心
834. 树中距离之和:动态规划(树形DP)、DFS(复杂DFS)
836. 矩形重叠:数学(反思维)
837. 新21点:DP动态规划(递推DP) + 差分/滑动窗口/前缀和
838. 推多米诺:模拟、BFS、双指针
839. 相似字符串组:并查集
840. 矩阵中的幻方:模拟、进阶(数量加大)
841. 钥匙和房间:DFS、BFS
842. 将数组拆分成斐波那契序列:DFS(回溯) + 剪枝
843. 猜猜这个单词:启发式极小化极大算法
844. 比较含退格的字符串:模拟、双指针
845. 数组中的最长山脉:DP动态规划(递推DP)、枚举、单调栈
846. 一手顺子:哈希
847. 访问所有节点的最短路径:BFS、Floyd + DP动态规划(状压DP)、A*算法、启发式搜索
848. 字母移位:前缀和、DP动态规划(递推DP) + 数学(取余)
849. 到最近的人的最大距离:DP动态规划(递推DP)、贪心、双指针
850. 矩形面积 II:数学(冗斥定理)、线段树
851. 喧闹和富有:记忆化搜索、拓扑排序
852. 山脉数组的峰顶索引:二分、枚举
853. 车队:贪心、优先队列、排序
854. 相似度为 K 的字符串:DP动态规划(序列DP)、BFS、DFS
855. 考场就座:贪心、优先队列 + 哈希
856. 括号的分数:栈、分治
857. 雇佣 K 名工人的最低成本:贪心、优先队列
858. 镜面反射:模拟、数学
859. 亲密字符串:枚举、双指针 + 哈希
860. 柠檬水找零:贪心
861. 翻转矩阵后的得分:贪心、位运算 + 数学(原地统计)
862. 和至少为 K 的最短子数组:滑动窗口、双端队列、线段树、单调栈
863. 二叉树中所有距离为 K 的结点:DFS、BFS
864. 获取所有钥匙的最短路径:BFS + 状态压缩、图(Dijkstra)
865. 具有所有最深节点的最小子树:DFS、DP动态规划(树形DP)
866. 回文素数:数学(推理)、枚举
867. 转置矩阵:模拟
868. 二进制间距:位运算
869. 重新排序得到 2 的幂:数学(计数)、排列组合、位运算
870. 优势洗牌:贪心、排序 + 双指针
871. 最低加油次数:DP动态规划(线性DP)、栈
872. 叶子相似的树:树的遍历(DFS、BFS)
873. 最长的斐波那契子序列的长度:DP动态规划(序列DP)
874. 模拟行走机器人:模拟、哈希
875. 爱吃香蕉的珂珂:二分查找
876. 链表的中间结点:双指针(快慢指针)
877. 石子游戏:DP动态规划(区间DP)、数学、记忆化搜索
878. 第 N 个神奇数字:数学、二分查找
879. 盈利计划:DP动态规划(背包)、记忆化搜索
880. 索引处的解码字符串:数学(逆向求解)
881. 救生艇:贪心
882. 细分图中的可到达结点:图(Dijkstra)、BFS + 剪枝
883. 三维形体投影面积:模拟(数学)
886. 可能的二分法:DFS、BFS、并查集
887. 鸡蛋掉落:DP动态规划(序列DP) + 二分
888. 公平的糖果棒交换:哈希、双指针
889. 根据前序和后序遍历构造二叉树:DFS、树的操作(构造)
890. 查找和替换模式:哈希
891. 子序列宽度之和:数学(推导)
893. 特殊等价字符串组:数学(计数)
894. 所有可能的满二叉树:DP动态规划、记忆化搜索
895. 最大频率栈:哈希 + 栈
896. 单调数列:模拟
897. 递增顺序搜索树:树的遍历
898. 子数组按位或操作:DP动态规划(序列DP)、集合、位运算
899. 有序队列:数学(找规律)
900. RLE 迭代器:模拟、栈
901. 股票价格跨度:单调栈、跳表
902. 最大为 N 的数字组合:DP动态规划(数位DP)、数学
903. DI 序列的有效排列:DP动态规划(区间DP、线性DP)、DFS(回溯)
904. 水果成篮:滑动窗口、模拟
905. 按奇偶排序数组:双指针、数学(原地法)
906. 超级回文数:数学(找规律)
907. 子数组的最小值之和:单调栈
908. 最小差值 I:数学、贪心
909. 蛇梯棋:图(BFS)、模拟
910. 最小差值 II:贪心
911. 在线选举:预处理 + 二分
912. 排序数组:排序(快排、堆排)
913. 猫和老鼠:DP动态规划(区间DP)、记忆化搜索
914. 卡牌分组:数学(最大公约数)
915. 分割数组:单调队列、辅助数组
916. 单词子集:数学(计数)、哈希
917. 仅仅反转字母:栈、双指针
918. 环形子数组的最大和:前缀和 + 单调队列、邻接数组、Kadane算法
919. 完全二叉树插入器:双端队列、树的遍历(层次变种)、树的操作(插入)
920. 播放列表的数量:DP动态规划(线性DP)
921. 使括号有效的最少添加:栈、数学(平衡法)
922. 按奇偶排序数组 II:双指针
923. 三数之和的多种可能:三指针、数学
924. 尽量减少恶意软件的传播:并查集、DFS
925. 长按键入:双指针、模拟
926. 将字符串翻转到单调递增:DP动态规划(线性DP)、前缀和、贪心
927. 三等分:二分 + 逆序三指针、双指针
928. 尽量减少恶意软件的传播 II:DFS、并查集
930. 和相同的二元子数组:前缀和 + 哈希、滑动窗口
931. 下降路径最小和:DP动态规划(线性DP)、记忆化搜索
932. 漂亮数组:分治、位运算
933. 最近的请求次数:二分、队列、模拟
934. 最短的桥:DFS + BFS
935. 骑士拨号器:DP动态规划(计数型DP)、记忆化搜索
936. 戳印序列:拓扑、模拟、数学(逆推)
937. 重新排列日志文件:自定义排序
938. 二叉搜索树的范围和:树的遍历(DFS、BFS)
939. 最小面积矩形:哈希、列排序
940. 不同的子序列 II:DP动态规划(计数型DP)
941. 有效的山脉数组:双指针
942. 增减字符串匹配:贪心、双指针
943. 最短超级串:DP动态规划(状压DP)
944. 删列造序:贪心
945. 使数组唯一的最小增量:贪心、并查集、数学(计数)、排序
946. 验证栈序列:栈、贪心、模拟
947. 移除最多的同行或同列石头:DFS、并查集
948. 令牌放置:贪心、双指针
951. 翻转等价二叉树:树的遍历(标准态)
953. 验证外星语词典:哈希
954. 二倍数对数组:哈希 + 排序
955. 删列造序 II:贪心、模拟
956. 最高的广告牌:DP动态规划(01背包)、折半搜索
957. N 天后的牢房:位运算、模拟、数学(找规律)
958. 二叉树的完全性检验:树的遍历
959. 由斜杠划分区域:并查集、DFS
960. 删列造序 III:DP动态规划(线性DP)
961. 重复 N 次的元素:数学(异或)、数学(计数)、哈希
962. 最大宽度坡:单调栈、二分查找
963. 最小面积矩形 II:数学(推导)
964. 表示数字的最少运算符:DP动态规划(数位DP)、记忆化搜索
965. 单值二叉树:树的遍历
966. 元音拼写检查器:哈希
967. 连续差相同的数字:DFS(回溯)、队列 + BFS
968. 监控二叉树:DP动态规划(树形DP)
969. 煎饼排序:数学、排序
970. 强整数:枚举、哈希
972. 相等的有理数:数学(分数法)
973. 最接近原点的 K 个点:排序(TOPK)
974. 和可被 K 整除的子数组:前缀和 + 哈希
975. 奇偶跳:单调栈 + sort 、树映射、DP动态规划(线性DP)
976. 三角形的最大周长:贪心 + 排序
977. 有序数组的平方:双指针、排序
978. 最长湍流子数组:滑动窗口、DP动态规划(序列DP)、模拟
979. 在二叉树中分配硬币:DFS
980. 不同路径 III:DFS(回溯)、DP动态规划(状压DP)
981. 基于时间的键值存储:哈希 + 二分
982. 按位与为零的三元组:位运算、数学(快速沃尔什变换)、前缀和
983. 最低票价:DP动态规划(线性DP)、记忆化搜索
985. 查询后的偶数和:模拟
986. 区间列表的交集:双指针
987. 二叉树的垂序遍历:自定义排序、DFS + 哈希 + 排序、DFS + 优先队列、DFS + 哈希+ 优先队列
988. 从叶结点开始的最小字符串:DFS(回溯)
989. 数组形式的整数加法:数学(逐位相加)
990. 等式方程的可满足性:并查集
991. 坏了的计算器:贪心 + 位运算
992. K 个不同整数的子数组:双指针
993. 二叉树的堂兄弟节点:树的遍历
994. 腐烂的橘子:多源BFS
995. K 连续位的最小翻转次数:差分、滑动窗口
996. 正方形数组的数目:DP动态规划(状压DP)、DFS(回溯)
997. 找到小镇的法官:模拟
998. 最大二叉树 II:树的遍历、树的操作(插入)
1000. 合并石头的最低成本:DP动态规划(区间DP)、记忆化搜索
1001. 网格照明:模拟、哈希
1002. 查找常用字符:数学(计数)、哈希
1004. 最大连续1的个数 III:二分查找、滑动窗口
1005. K 次取反后最大化的数组和:排序 + 贪心
1006. 笨阶乘:栈、模拟、数学(找规律)
1008. 前序遍历构造二叉搜索树:二分、栈、直接插入、树的遍历
1009. 十进制整数的反码:位运算
1010. 总持续时间可被 60 整除的歌曲:哈希、数学(取模)
1011. 在 D 天内送达包裹的能力:二分查找
1012. 至少有 1 位重复的数字:DP动态规划(数位DP)、数学
1013. 将数组分成和相等的三个部分:前缀和、数学(寻找切分点)
1014. 最佳观光组合:DP动态规划(线性DP)、贪心
1015. 可被 K 整除的最小整数:数学(推理)、模拟、DP动态规划(数位DP)
1016. 子串能表示从 1 到 N 数字的二进制串:枚举、模拟
1017. 负二进制转换:数学(取模)
1018. 可被 5 整除的二进制前缀:有限状态机、数学
1020. 飞地的数量:DFS(回溯)、BFS + 优先队列
1021. 删除最外层的括号:双指针、栈
1022. 从根到叶的二进制数之和:树的遍历(DFS、BFS)
1023. 驼峰式匹配:双指针、字典树 + DFS
1024. 视频拼接:排序 + 贪心、DP动态规划(01背包)
1025. 除数博弈:数学(推理)、DP动态规划(序列DP)
1026. 节点与其祖先之间的最大差值:树的遍历
1027. 最长等差数列:DP动态规划(序列DP)
1028. 从先序遍历还原二叉树:DFS(回溯)
1029. 两地调度:贪心
1030. 距离顺序排列矩阵单元格:数学(几何法)、排序
1031. 两个非重叠子数组的最大和:前缀和 + DP动态规划(递推DP),滑动窗口 + 前缀和
1032. 字符流:字典树、AC自动机
1033. 移动石子直到连续:数学(找规律)
1034. 边框着色:并查集、DFS、BFS
1035. 不相交的线:DP动态规划(序列DP)
1036. 逃离大迷宫:BFS
1037. 有效的回旋镖:数学(余弦相似度)
1038. 把二叉搜索树转换为累加树:树的遍历(Morris、反序中序)
1039. 多边形三角剖分的最低得分:DP动态规划(区间DP)、记忆化搜索
1040. 移动石子直到连续 II:贪心、滑动窗口 + 二分
1042. 不邻接植花:DFS
1043. 分隔数组以得到最大和:DP动态规划(区间DP)
1044. 最长重复子串:哈希(Rabin-Karp编码) + 二分
1046. 最后一块石头的重量:排序(堆排序)、模拟
1047. 删除字符串中的所有相邻重复项;栈、双端队列
1048. 最长字符串链:DP动态规划(线性DP)
1049. 最后一块石头的重量 II:DP动态规划(01背包)
1051. 高度检查器:排序(桶排序)、数学
1052. 爱生气的书店老板:滑动窗口
1053. 交换一次的先前排列:单调栈、贪心 + 双指针、数学(找规律)
1054. 距离相等的条形码:贪心、优先队列
1071. 字符串的最大公因子:枚举、数学(辗转相除法、最大公约数)
1073. 负二进制数相加:数学(找规律)
1074. 元素和为目标值的子矩阵数量:前缀和 + 哈希、前缀和
1079. 活字印刷:DFS(回溯)
1080. 根到叶路径上的不足节点:树的遍历(DFS)
1081. 不同字符的最小子序列:贪心 + 单调栈、贪心
1089. 复写零:模拟
1090. 受标签影响的最大值:贪心、堆 + 哈希
1092. 最短公共超序列:DP动态规划(序列DP)
1093. 大样本统计:双指针
1094. 拼车:前缀和、差分
1095. 山脉数组中查找目标值:二分查找
1096. 花括号展开 II:BFS、栈
1103. 分糖果 II:数学(等差数列之和)、模拟
1104. 二叉树寻路:数学、模拟
1105. 填充书架:DP动态规划(序列DP)
1106. 解析布尔表达式:模拟、栈
1109. 航班预订统计:差分、线段树
1110. 删点成林:树的遍历
1111. 有效括号的嵌套深度:栈、数学(找规律)
1114. 按序打印:并发问题
1115. 交替打印FooBar:多线程
1116. 打印零与奇偶数:多线程
1117. H2O 生成:多线程
1122. 数组的相对排序:哈希、自定义排序(快速、 归并)、优先队列
1123. 最深叶节点的最近公共祖先:树的遍历(DFS)
1124. 表现良好的最长时间段:单调栈、前缀和+哈希
1125. 最小的必要团队:记忆化搜索、DP动态规划(状压DP,01背包)、BFS
1128. 等价多米诺骨牌对的数量:排序 + 哈希、二元组表示 + 数学(计数)
1129. 颜色交替的最短路径:BFS、DFS
1130. 叶值的最小代价生成树:贪心、DP动态规划(树形DP)、记忆化搜索
1131. 绝对值表达式的最大值:数学(曼哈顿距离)
1137. 第 N 个泰波那契数:DP动态规划(递推DP)、数学(快速幂)、记忆化搜索
1139. 最大的以 1 为边界的正方形:DP动态规划(区间DP)
1140. 石子游戏 II:记忆化搜索、DP动态规划(区间DP)
1143. 最长公共子序列:DP动态规划(序列DP)
1144. 递减元素使数组呈锯齿状:贪心(暴力奇偶统计)
1145. 二叉树着色游戏:树的遍历
1146. 快照数组:哈希 + 二分
1147. 段式回文:贪心、双指针、DP动态规划(区间DP)
1155. 掷骰子的N种方法:DP动态规划(背包DP、计数型DP)
1156. 单字符重复子串的最大长度:滑动窗口 + 哈希
1157. 子数组中占绝大多数的元素:线段树 + 摩尔投票、二分查找
1160. 拼写单词:哈希
1161. 最大层内元素和:树的遍历
1162. 地图分析:多源BFS
1169. 查询无效交易:哈希
1170. 比较字符串最小字母出现频次:哈希 + 二分、模拟
1172. 餐盘栈:树状数组、模拟
1175. 质数排列:数学(厄拉多塞筛法)
1177. 构建回文串检测:前缀和 + 哈希、位运算 + 分治、DP动态规划(计数型DP) + 哈希
1178. 猜字谜:字典树、位运算(二进制状态压缩)
1184. 公交站间的距离:预处理 + 前缀和
1185. 一周中的第几天:模拟、数学(推理)
1186. 删除一次得到子数组最大和:DP动态规划(线性DP、递推DP)、贪心、预处理 + 前后缀
1187. 使数组严格递增:DP动态规划(线性DP)、记忆化搜索
1191. K 次串联后最大子数组之和:贪心、DP动态规划(线性DP)
1192. 查找集群内的「关键连接」:DFS + tarjan算法(图)
1195. 交替打印字符串:多线程
1200. 最小绝对差:排序 + 哈希
1201. 丑数 III:二分 + 数学(丑数个数计算)
1202. 交换字符串中的元素:字典序定义(bfs、dfs、并查集)
1203. 项目管理:拓扑
1206. 设计跳表:模拟
1207. 独一无二的出现次数:排序、哈希
1208. 尽可能使字符串相等:前缀和 + 二分、滑动窗口
1209. 删除字符串中的所有相邻重复项 II:栈、数学(计数)、双指针
1210. 穿过迷宫的最少移动次数:BFS、DP动态规划(状压DP)
1217. 玩筹码:贪心
1218. 最长定差子序列:DP动态规划(线性DP) + 哈希
1219. 黄金矿工:DFS(回溯)
1220. 统计元音字母序列的数目:DP动态规划 (计数型DP)+ 数学(快速幂)
1221. 分割平衡字符串:贪心、模拟
1222. 可以攻击国王的皇后:模拟、DFS
1223. 掷骰子模拟:DP动态规划(递推DP)
1224. 最大相等频率:哈希 + 数学(计数)
1226. 哲学家进餐:操作系统(破坏循环等待)
1227. 飞机座位分配概率:数学(推理)
1232. 缀点成线:数学、模拟
1233. 删除子文件夹:字典树
1234. 替换子串得到平衡字符串:滑动窗口、前缀和 + 哈希、贪心
1235. 规划兼职工作:DP动态规划(序列DP、线性DP) + 二分
1237. 找出给定方程的正整数解:二分、双指针
1238. 循环码排列:DFS(回溯)、位运算(异或取反)
1239. 串联字符串的最大长度:DFS(回溯)+ 位运算、DP动态规划(01背包、线性DP) + 位运算、启发式搜索
1240. 铺瓷砖:DFS(回溯)、DP动态规划(状压DP)
1247. 交换字符使得字符串相同:贪心、数学(推理)
1248. 统计「优美子数组」:前缀和 + 差分、数学(找规律)、滑动窗口
1249. 移除无效的括号:栈 + StringBuilder、StringBuilder
1250. 检查「好数组」:数学(最大公约数、裴蜀定理)
1253. 重构 2 行二进制矩阵:模拟、贪心
1254. 统计封闭岛屿的数目:DFS、BFS、并查集
1255. 得分最高的单词集合:DFS(回溯)、位运算(位压缩)
1260. 二维网格迁移:模拟、模拟 + 数学(原地法)
1262. 可被三整除的最大和:DP动态规划(递推DP)、数学(质数)
1263. 推箱子:BFS + 优先队列、BFS + DFS
1266. 访问所有点的最小时间:模拟、数学(切比雪夫距离)
1267. 统计参与通信的服务器:并查集、数学(计数)
1268. 搜索推荐系统:字典树 + DFS、二分
1269. 停在原地的方案数:DP动态规划(序列DP)、数学(规律)、记忆化搜索
1276. 不浪费原料的汉堡制作方案:数学(推导)
1277. 统计全为 1 的正方形子矩阵:DP动态规划(区间DP)
1278. 分割回文串 III:DP动态规划(序列DP)、DFS(回溯)
1282. 用户分组:哈希、贪心
1284. 转化为全零矩阵的最少反转次数:DFS + 状态压缩、BFS + Dijkstra
1286. 字母组合迭代器:数学(找规律)、DFS(回溯)
1287. 有序数组中出现次数超过25%的元素:模拟、二分、双指针
1288. 删除被覆盖区间:排序 + 贪心
1289. 下降路径最小和 II:DP动态规划(线性DP)
1290. 二进制链表转整数:模拟、栈、位运算
1291. 顺次数:DFS(回溯)、枚举
1292. 元素和小于等于阈值的正方形的最大边长:前缀和、二分 + 前缀和
1293. 网格中的最短路径:BFS
1295. 统计位数为偶数的数字:枚举 + 数学、枚举+ 字符串
1296. 划分数组为连续数字的集合:sort+模拟
1297. 子串的最大出现次数:枚举、哈希、滑动窗口
1298. 你能从盒子里获得的最大糖果数:BFS + 队列
1299. 将每个元素替换为右侧最大元素:栈(逆序)
1300. 转变数组后最接近目标值的数组和:二分、三分、二分 + 前缀和
1301. 最大得分的路径数目:DP动态规划(线性DP)
1302. 层数最深叶子节点的和:树的遍历
1304. 和为零的N个唯一整数:数学(中心对称)
1305. 两棵二叉搜索树中的所有元素:排序 + 树的遍历
1306. 跳跃游戏 III:DFS、BFS
1307. 口算难题:DFS(回溯)
1310. 子数组异或查询:树状数组、数学(前缀异或)
1311. 获取你好友已观看的视频:BFS + 哈希 + 优先队列、BFS + 哈希 + 排序
1312. 让字符串成为回文串的最少插入次数:DP动态规划(区间DP)
1314. 矩阵区域和:前缀和
1315. 祖父节点值为偶数的节点和:DFS、BFS
1316. 不同的循环子字符串:滚动哈希 + 前缀和、枚举
1317. 将整数转换为两个无零整数的和:枚举、数学(推理)
1318. 或运算的最小翻转次数:位运算、数学(推理)
1319. 连通网络的操作次数:DFS、BFS、并查集
1320. 二指输入的的最小距离:DP动态规划(区间DP)
1323. 6 和 9 组成的最大数字:模拟、数学
1324. 竖直打印单词:模拟
1325. 删除给定值的叶子节点:树的操作(删除)、树的遍历
1326. 灌溉花园的最少水龙头数目:DP动态规划(区间DP)、贪心
1328. 破坏回文串:贪心
1329. 将矩阵按对角线排序:模拟、哈希
1331. 数组序号转换:哈希 + 排序、桶排序 + 前缀和
1332. 删除回文子序列:数学(找规律)
1333. 餐厅过滤器:哈希 + 排序
1334. 阈值距离内邻居最少的城市:最短路径(图)、BFS
1335. 工作计划的最低难度:DP动态规划(线性DP)
1337. 矩阵中战斗力最弱的 K 行:二分 + 优先队列(堆)、二分 + 排序
1338. 数组大小减半:贪心、数学(计数) + 排序
1339. 分裂二叉树的最大乘积:数学、DFS、树的遍历
1340. 跳跃游戏 V:记忆化搜索、DP动态规划(线性DP)
1343. 大小为 K 且平均值大于等于阈值的子数组数目:滑动窗口
1345. 跳跃游戏 IV:BFS + 哈希、DP动态规划(线性DP) + 哈希
1347. 制造字母异位词的最小步骤数:哈希、双指针
1348. 推文计数:模拟、平衡二叉树
1349. 参加考试的最大学生数:DP动态规划(状压DP)、记忆化搜索
1351. 统计有序矩阵中的负数:二分、双指针
1352. 最后 K 个数的乘积:前缀积
1353. 最多可以参加的会议数目:优先队列、贪心
1354. 多次求和构造目标数组:数学(找规律)、逆推 + 优先队列/最大堆
1358. 包含所有三种字符的子字符串数目:滑动窗口、枚举 + 二分、DP动态规划(线性DP)
1359. 有效的快递序列数目:数学(递推、整体法)
1361. 验证二叉树:拓扑、并查集、树的遍历
1362. 最接近的因数:数学(最大均方根)
1363. 形成三的最大倍数:DP动态规划(01背包)、数学
1365. 有多少小于当前数字的数字:排序、数学(计数) + 前缀和
1367. 二叉树中的列表:枚举、DP动态规划(树形DP)、KMP + DFS
1368. 使网格图至少有一条有效路径的最小代价:BFS、最短路径(图)
1370. 上升下降字符串:数学(桶计数)、哈希
1371. 每个元音包含偶数次的最长子字符串:前缀和 + 状态压缩
1372. 二叉树中的最长交错路径:DP动态规划(树形DP)、DFS
1373. 二叉搜索子树的最大键值和:树的遍历(后续)
1375. 灯泡开关 III:双指针、树状数组 + 前缀和
1376. 通知所有员工所需的时间:树的遍历
1377. T 秒后青蛙的位置:BFS、DFS
1379. 找出克隆二叉树中的相同节点:栈、DFS
1382. 将二叉搜索树变平衡:贪心、树的操作(转换)、树的遍历
1383. 最大的团队表现值:排序 + 堆
1385. 两个数组间的距离值:二分、模拟
1386. 安排电影院座位:位运算、哈希 + 状态压缩
1387. 将整数按权重排序:记忆化搜索、哈希、DFS
1388. 3n 块披萨:DP动态规划(序列DP)
1389. 按既定顺序创建目标数组:模拟、数学(原地法)
1390. 四因数:枚举、数学
1391. 检查网格中是否存在有效路径:模拟、并查集、DFS
1392. 最长快乐前缀:字符串匹配(kmp)、哈希 + 前缀和
1395. 统计作战单位数:枚举、离散化树状数组、DP动态规划(递推DP)
1396. 设计地铁系统:哈希
1397. 找到所有好字符串:DP动态规划(数位DP) + 字符串匹配(KMP)
1399. 统计最大组的数目:数学、哈希
1400. 构造 K 个回文字符串:贪心、哈希、位运算
1401. 圆和矩形是否有重叠:模拟、数学
1402. 做菜顺序:贪心、DFS(回溯)、sort + DP动态规划(线性DP)
1404. 将二进制表示减到 1 的步骤数:模拟、数学(计数)
1405. 最长快乐字符串:贪心、数学(计数)
1406. 石子游戏 III:DP动态规划(区间DP)、记忆化搜索
1408. 数组中的字符串匹配:排序、字典树、字符串匹配(KMP)、模拟
1409. 查询带键的排列:模拟、树状数组
1411. 给 N x 3 网格图涂色的方案数:数学、DP动态规划(计数型DP) + 位运算
1413. 逐步求和得到正数的最小值:前缀和 + 排序、DP动态规划(线性DP)
1415. 长度为 n 的开心字符串中字典序第 k 小的字符串:DFS(回溯)、数学(计数)
1416. 恢复数组:DP动态规划(递推DP)
1417. 重新格式化字符串:双指针、数学(分离法)
1418. 点菜展示表:哈希
1419. 数青蛙:模拟
1420. 生成数组:前缀和 + DP动态规划(计数型DP)、记忆化搜索
1422. 分割字符串的最大得分:模拟、数学(计数)
1423. 可获得的最大点数:滑动窗口、前缀和
1424. 对角线遍历 II:优先队列、数学(找规律)
1425. 带限制的子序列和:DP动态规划(序列DP) + 优先队列/堆/单调栈
1432. 改变一个整数能得到的最大差值:枚举、贪心、模拟
1433. 检查一个字符串是否可以打破另一个字符串:排序、数学(计数)
1434. 每个人戴不同帽子的方案数:DP动态规划(状压DP)
1436. 旅行终点站:哈希、模拟
1438. 绝对差不超过限制的最长连续子数组:滑动窗口 + 单调队列、滑动窗口 + 哈希
1439. 有序矩阵中的第 k 个最小数组和:二分、模拟、最小堆、优先队列 + 最短路径
1441. 用栈操作构建数组:模拟栈
1442. 形成两个异或相等数组的三元组数目:位运算(异或)、哈希
1443. 收集树上所有苹果的最少时间:树的遍历(后续)
1444. 切披萨的方案数:DP动态规划(线性DP)、记忆化搜索
1446. 连续字符:双指针、状态机
1447. 最简分数:模拟、数学(欧几里得距离)
1449. 数位成本和为目标值的最大数字:DP动态规划(完全背包)
1450. 在既定时间做作业的学生人数:数学(推理)
1452. 收藏清单:哈希
1453. 圆形靶内的最大飞镖数量:贪心、数学(推导)
1456. 定长子串中元音的最大数目:滑动窗口
1457. 二叉树中的伪回文路径:位运算、DFS(回溯)
1458. 两个子序列的最大点积:DP动态规划(递推DP)
1460. 通过翻转子数组使两个数组相等:数学、排序
1461. 检查一个字符串是否包含所有长度为 K 的二进制子串:哈希、哈希 + 滑动窗口
1462. 课程表 IV:记忆化搜索、最短路径
1463. 摘樱桃 II:DP动态规划(线性DP)、记忆化搜索
1464. 数组中两元素的最大乘积:排序、贪心
1465. 切割后面积最大的蛋糕:排序、差分数组
1466. 重新规划路线:BFS
1467. 两个盒子中球的颜色数相同的概率:DP动态规划(递推DP)、DFS(回溯) + 剪枝
1470. 重新排列数组:双指针、数学(原地法)
1471. 数组中的 k 个最强值:双指针 + 排序、堆
1472. 设计浏览器历史记录:模拟、栈
1473. 粉刷房子 III:DP动态规划(序列DP)、记忆化搜索
1475. 商品折扣后的最终价格:单调栈、差分数组
1476. 子矩形查询:模拟
1477. 找两个和为目标值且不重叠的子数组:DP动态规划(区间DP) + 滑动窗口、贪心、双指针
1478. 安排邮筒:DP动态规划(线性DP)、记忆化搜索
1480. 一维数组的动态和:数学(原地法)、前缀和
1481. 不同整数的最少数目:排序 + 贪心
1482. 制作 m 束花所需的最少天数:二分查找
1483. 树节点的第 K 个祖先:DFS/BFS + 哈希
1486. 数组异或操作:模拟、数学(推导)
1488. 避免洪水泛滥:贪心 + 二分、并查集
1489. 找到最小生成树里的关键边和伪关键边:最小生成树 + 枚举/连通性
1492. n 的第 k 个因子:枚举、双指针、DP动态规划(线性DP)
1493. 删掉一个元素以后全为 1 的最长子数组:滑动窗口
1494. 并行课程 II:DP动态规划(状压DP) + 位运算/枚举/二进制枚举
1496. 判断路径是否相交:哈希、模拟
1497. 检查数组对是否可以被 k 整除:数学(余数频率统计)
1498. 满足条件的子序列数目:排序 + 二分 + 快速幂、排序 + 滑动窗口 + 快速幂
1499. 满足不等式的最大值:滑动窗口、单调队列
1503. 所有蚂蚁掉下来前的最后一刻:数学(推理)
1504. 统计全 1 子矩形:单调栈、枚举、DP动态规划(线性DP)、位运算
1505. 最多 K 次交换相邻数位后得到的最小整数:贪心、树状数组、线段树
1507. 转变日期格式:模拟
1508. 子数组和排序后的区间和:二分 + 双指针、前缀和
1509. 三次操作后最大值与最小值的最小差:排序、贪心
1510. 石子游戏 IV:DP动态规划(区间DP)、记忆化搜索
1512. 好数对的数目:数学
1513. 仅含 1 的子串数:双指针
1514. 概率最大的路径:最短路径
1515. 服务中心的最佳位置:数学(凸函数、模拟退火)
1518. 换酒问题:模拟、数学
1519. 子树中标签相同的节点数:DFS + 哈希
1520. 最多的不重叠子字符串:贪心、DP动态规划(序列DP)
1521. 找到最接近目标值的函数值:位运算、线段树 + 滑动窗口
1523. 在区间范围内统计奇数数目:数学(推导)
1524. 和为奇数的子数组数目:DP动态规划(线性DP)、前缀和 + 数学
1525. 字符串的好分割数目:DP动态规划(区间DP、递推DP)、哈希 + 数学(计数)、前缀和
1526. 形成目标数组的子数组最少增加次数:单调栈、贪心、DP动态规划(计数型DP)、拆分
1528. 重新排列字符串:模拟、数学(原地法)
1529. 灯泡开关 IV:模拟、双指针、DP动态规划(状压DP)
1530. 好叶子节点对的数量:树的遍历
1531. 压缩字符串 II:DP动态规划(区间DP)
1534. 统计好三元组:枚举
1535. 找出数组游戏的赢家:模拟、双指针
1536. 排布二进制网格的最少交换次数:贪心、模拟
1537. 最大得分:DP动态规划(递推DP)、双指针
1539. 第 k 个缺失的正整数:枚举、二分、模拟
1540. K 次操作转变字符串:数学(计数)
1541. 平衡括号字符串的最少插入次数:贪心、栈、模拟
1542. 找出最长的超赞子字符串:前缀和 + 状态压缩、哈希 + 位运算、DP动态规划(状压DP)
1544. 整理字符串:模拟、栈
1545. 找出第 N 个二进制字符串中的第 K 位:DP动态规划(状压DP)、数学(找规律)
1546. 和为目标值且不重叠的非空子数组的最大数目:前缀和 + 哈希、DP动态规划(01背包)
1547. 切棍子的最小成本:DP动态规划(区间DP)、记忆化搜索
1551. 使数组中所有元素相等的最小操作数:贪心、数学(找规律)
1553. 吃掉 N 个橘子的最少天数:记忆化搜索、最短路、启发式搜索
1556. 千位分隔数:模拟、正则
1557. 可以到达所有点的最少点数目:数学(入度为0)
1558. 得到目标数组的最少函数调用次数:位运算(二进制)、数学(推理)
1559. 二维网格图中探测环:DFS、并查集、层次遍历
1560. 圆形赛道上经过次数最多的扇区:模拟、差分、数学
1561. 你可以获得的最大硬币数目:贪心、双指针
1562. 查找大小为 M 的最新分组:模拟、并查集、数学(窗口最大值)
1563. 石子游戏 V:DP动态规划(区间DP)
1566. 重复至少 K 次且长度为 M 的模式:枚举、双指针、模拟
1567. 乘积为正数的最长子数组长度:DP动态规划(线性DP)、前缀和
1568. 使陆地分离的最少天数:并查集 + tarjan、DFS
1569. 将子数组重新排序得到同一个二叉查找树的方案数:DP动态规划(树形DP) + 数学(计数)
1572. 矩阵对角线元素的和:数学(逐行取数)
1573. 分割字符串的方案数:数学、模拟、前缀和 + 二分
1575. 统计所有可行路径:记忆化搜索、DP动态规划(背包变形)
1577. 数的平方等于两数乘积的方法数:哈希、双指针
1578. 避免重复字母的最小删除成本:贪心、DP动态规划(线性DP)、双指针、栈
1579. 保证图可完全遍历:并查集
1582. 二进制矩阵中的特殊位置:双指针、模拟
1584. 连接所有点的最小费用:并查集、最小生成树(图)
1585. 检查字符串是否可以通过排序子字符串得到另一个字符串:排序(冒泡)、数学(逆序数)
1588. 所有奇数长度子数组的和:前缀和、数学
1589. 所有排列中的最大和:贪心、前缀和 + 差分
1590. 使数组和能被 P 整除:前缀和 + 哈希、数学
1592. 重新排列单词间的空格:数学(计数)
1593. 拆分字符串使唯一子字符串的数目最大:DFS(回溯)
1594. 矩阵的最大非负积:DP动态规划(线性DP)
1595. 连通两组点的最小成本:DP动态规划(状压DP)
1598. 文件夹操作日志搜集器:数学(计数)、栈
1600. 皇位继承顺序:多叉树遍历、链表 + 数学(标记)
1601. 最多可达成的换楼请求数目:最小费用最大流(图)、DP动态规划(背包) + 状态压缩
1603. 设计停车系统:模拟、哈希、位运算(二进制)
1604. 警告一小时内使用相同员工卡大于等于三次的人:哈希
1606. 找到处理最多请求的服务器:优先队列 + 二分查找、优先队列 + 哈希
1608. 特殊数组的特征值:二分、枚举、数学(计数)
1609. 奇偶树:数的遍历(层次)
1610. 可见点的最大数目:极坐标 + 滑动窗口
1611. 使整数变为 0 的最少操作次数:记忆化搜索、数学(找规律)
1614. 括号的最大嵌套深度:前缀和、栈、正则
1615. 最大网络秩:枚举
1616. 分割两个字符串得到回文串:双指针 + 贪心
学习资料: