这是一份由力扣官方整理的推荐刷题路径,适合 考虑系统性地按各知识点刷题 的扣友。
你可以这样使用本刷题攻略:
除了按照本帖推荐的刷题路径进行刷题以外,你还可以一同参与这个题单的创建与维护,你可以:
更新日志
| 日期 | 内容 | 贡献者 |
|---|---|---|
| 2023 - 03 - 03 | 【数组篇 - 统计数组中的元素】删除 274. H 指数,这题是「二分查找」,已经不是单纯考数组的问题了。【链表篇 - 链表中的双指针技巧】增加 142. 环形链表 II | liweiwei1419 |
| 2023 - 03 - 07 | 【图篇】修正了深度优先搜索和广度优先搜索英文使用错误。 | Mrclick |
| 2023 - 03 - 07 | 【树与二叉树篇】调整了【题目分类】的颗粒度和排序 | 力扣 (LeetCode) |
| 2023 - 03 - 10 | 【滑动窗口专题】、【二分查找专题】、【双指针专题】、【前缀和专题】、【位运算专题】完成更新。 | 力扣 (LeetCode) |
索引
| 题目分类 | 题目编号 |
|---|---|
| 数组的改变、移动 | 453. 最小移动次数使数组元素相等 // 665. 非递减数列 // 283. 移动零 |
| 数组的旋转 | 189. 旋转数组 // 396. 旋转函数 |
| 统计数组中的元素 | 645. 错误的集合 // 697. 数组的度 // 448. 找到所有数组中消失的数字 // 442. 数组中重复的数据 // 41. 缺失的第一个正数 |
| 数组的遍历 | 485. 最大连续1的个数 // 495. 提莫攻击 // 414. 第三大的数 // 628. 三个数的最大乘积 |
| 二维数组及滚动数组 | 118. 杨辉三角 // 119. 杨辉三角 II // 661. 图片平滑器 // 598. 范围求和 II // 419. 甲板上的战舰 |
| 特定顺序遍历二维数组 | 54. 螺旋矩阵 // 59. 螺旋矩阵 II // 498. 对角线遍历 |
| 二维数组变换 | 566. 重塑矩阵 // 48. 旋转图像 // 73. 矩阵置零 // 289. 生命游戏 |
| 前缀和数组 | 303. 区域和检索 - 数组不可变 // 304. 二维区域和检索 - 矩阵不可变 // 238. 除自身以外数组的乘积 |
推荐阅读 (欢迎投稿)
没有人一起从零开始刷力扣(一)——数组篇 by noone_
《数组和字符串》 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 移除与插入链表元素 | 707. 设计链表 // 203. 移除链表元素 // 237. 删除链表中的节点 // 19. 删除链表的倒数第 N 个结点 // 83. 删除排序链表中的重复元素 // 82. 删除排序链表中的重复元素 II |
| 链表的遍历 | 430. 扁平化多级双向链表 // 114. 二叉树展开为链表 |
| 链表的旋转与反转 | 61. 旋转链表 // 24. 两两交换链表中的节点 // 206. 反转链表 // 92. 反转链表 II // 25. K 个一组翻转链表 |
| 链表高精度加法 | 2. 两数相加 // 445. 两数相加 II // 面试题 02.05. 链表求和 |
| 链表的合并 | 21. 合并两个有序链表 // 23. 合并K个升序链表 |
| 链表中的双指针技巧 | 86. 分隔链表 // 19. 删除链表的倒数第 N 个结点 // 141. 环形链表 // 142. 环形链表 II // 876. 链表的中间结点 // 143. 重排链表 // 160. 相交链表 |
推荐阅读 (欢迎投稿)
一文搞定常见的链表问题 by 自在飞花
【反转链表】:双指针,递归,妖魔化的双指针 by 路漫漫我不畏
| 题目分类 | 题目编号 |
|---|---|
| 哈希表的查找、插入及删除 | 706. 设计哈希映射 // 217. 存在重复元素 // 349. 两个数组的交集 // 128. 最长连续序列 //290. 单词规律 // 532. 数组中的 k-diff 数对 // 205. 同构字符串 // 138. 复制带随机指针的链表 |
| 哈希表与索引 | 1. 两数之和 // 599. 两个列表的最小索引总和 // 219. 存在重复元素 II |
| 哈希表与统计 | 594. 最长和谐子序列 // 350. 两个数组的交集 II // 554. 砖墙 // 609. 在系统中查找重复文件 // 454. 四数相加 II |
| 哈希表与前缀和 | 560. 和为 K 的子数组 // 523. 连续的子数组和 // 525. 连续数组 |
推荐阅读 (欢迎投稿)
| 题目分类 | 题目编号 |
|---|---|
| 栈的实现 | 232. 用栈实现队列 // 225. 用队列实现栈// 面试题 03.01. 三合一 // 1441. 用栈操作构建数组 |
| 单调栈 | 496. 下一个更大元素 I // 84. 柱状图中最大的矩形// 9. 每日温度 // 901. 股票价格跨度 // 42. 接雨水 |
| 最小/大栈 | 面试题 03.02. 栈的最小值 // 剑指 Offer 30. 包含min函数的栈 // 155. 最小栈 // 716. 最大栈 |
| 字符串去重问题 | 316.去除重复字母 // 1209. 删除字符串中的所有相邻重复项 II // 1081.不同字符的最小子序列 |
| 栈与括号匹配 | 20. 有效的括号 // 636. 函数的独占时间 // 591. 标签验证器 // 32. 最长有效括号 |
| 表达式求值 | 150. 逆波兰表达式求值//224. 基本计算器 //227. 基本计算器 II // 772. 基本计算器 III // 770. 基本计算器 IV |
| 用栈访问最后若干元素 | 682. 棒球比赛 // 71. 简化路径 // 388. 文件的最长绝对路径 |
| 递归 | 385. 迷你语法分析器 // 341. 扁平化嵌套列表迭代器 // 394. 字符串解码 |
| 滑动窗口最大值问题 | 239. 滑动窗口最大值 |
| 求前 K 个高频元素 | 347. 前K个高频元素 // 692. 前K个高频单词 |
推荐阅读 (欢迎投稿)
【柱状图中最大的矩形】单调栈入门,使用单调栈快速寻找边界 by Ikaruga
C++ 利用哨兵👨✈️,维护一个单调栈📈(图解,直观掌握) by 文慕阳
| 题目分类 | 题目编号 |
|---|---|
| 字符 | 520. 检测大写字母 |
| 回文串的定义 | 125. 验证回文串 |
| 公共前缀 | 14. 最长公共前缀 |
| 单词 | 434. 字符串中的单词数 // 58. 最后一个单词的长度 |
| 字符串的反转 | 344. 反转字符串 // 541. 反转字符串 II // 557. 反转字符串中的单词 III // 151. 翻转字符串里的单词 |
| 字符的统计 | 387. 字符串中的第一个唯一字符 // 389. 找不同 // 383. 赎金信 // 242. 有效的字母异位词 // 49. 字母异位词分组 // 451. 根据字符出现频率排序 // 423. 从英文中重建数字 // 657. 机器人能否返回原点 // 551. 学生出勤记录 I // 696. 计数二进制子串 // 467. 环绕字符串中唯一的子字符串 |
| 数字与字符串间转换 | 299. 猜数字游戏 // 412. Fizz Buzz // 506. 相对名次 // 539. 最小时间差 // 553. 最优除法 // 537. 复数乘法 // 592. 分数加减运算 // 640. 求解方程 // 38. 外观数列 // 443. 压缩字符串 // 8. 字符串转换整数 (atoi) // 13. 罗马数字转整数 // 12. 整数转罗马数字 // 273. 整数转换英文表示 // 165. 比较版本号 // 481. 神奇字符串 |
| 子序列 | 392. 判断子序列 // 524. 通过删除字母匹配到字典里最长单词 // 521. 最长特殊序列 Ⅰ // 522. 最长特殊序列 II |
| 高精度运算 | 66. 加一 // 67. 二进制求和 // 415. 字符串相加 // 43. 字符串相乘 // 306. 累加数 |
| 字符串变换 | 482. 密钥格式化 // 6. Z 字形变换 // 68. 文本左右对齐 |
| 字符串匹配 | 28. 实现 strStr() // 686. 重复叠加字符串匹配 // 459. 重复的子字符串 // 214. 最短回文串 |
| 中心拓展法 | 5. 最长回文子串 // 647. 回文子串 |
推荐阅读 (欢迎投稿)
没有人一起从零开始刷力扣(二)——字符串篇 by noone_
数组和字符串 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 进制转换 | 67. 二进制求和 // 504. 七进制数 // 405. 数字转换为十六进制数 // 476. 数字的补数 // 66. 加一 // 479. 最大回文数乘积 // 564. 寻找最近的回文数 // 504. 七进制数 // 7. 整数反转 // 693. 交替位二进制数 |
| 数值计算 | 415. 字符串相加 // 43. 字符串相乘 // 556. 下一个更大元素 III // 9. 回文数 // 258. 各位相加 // 461. 汉明距离 // 477. 汉明距离总和 |
| 数学问题 | 204. 计数质数 // 263. 丑数 // 367. 有效的完全平方数 // 1071. 字符串的最大公因子 |
推荐阅读 (欢迎投稿)
没有人一起从零开始刷力扣(三)- 数与位篇 by noone_
| 题目分类 | 题目编号 |
|---|---|
| 二叉树相关问题 | 100. 相同的树 // 226. 翻转二叉树 // 104. 二叉树的最大深度 // 543. 二叉树的直径 // 617. 合并二叉树 // 572. 另一棵树的子树 // 965. 单值二叉树 // 101. 对称二叉树 // 104. 二叉树的最大深度 |
| 回溯相关问题 | 51. N 皇后 // 37. 解数独 // 39. 组合总和 // 46. 全排列 // 79. 单词搜索 |
| 动态规划相关问题 | 509. 斐波那契数 // 70. 爬楼梯 // 53. 最大子数组和 // 198. 打家劫舍 // 300. 最长递增子序列 |
| 推荐阅读 (欢迎投稿) |
一看就会,一写就废?详解递归 by 腐烂的橘子
一篇文章带你吃透对称性递归(思路分析+解题模板+案例解读) by 星晴pro
递归和分治图文学 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 分解问题 | 169. 多数元素 // 4. 寻找两个正序数组的中位数 // 543. 二叉树的直径 |
| 解决子问题 | 69. x 的平方根 // 53. 最大子数组和 // 34. 在排序数组中查找元素的第一个和最后一个位置 |
| 合并结果 | 23. 合并 K 个升序链表 // 1277. 统计全为 1 的正方形子矩阵 |
推荐阅读 (欢迎投稿)
递归和分治图文学 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 区间类 | 435. 无重叠区间 // 452. 用最少数量的箭引爆气球 // 763. 划分字母区间 // 1353. 最多可以参加的会议数目 // 1520. 最多的不重叠子字符串 // 738. 单调递增的数字 |
| 峰谷类 | 122. 买卖股票的最佳时机 II // 714. 买卖股票的最佳时机含手续费 // 376. 摆动序列 // 135. 分发糖果 |
| 钱币类 | 322. 零钱兑换 // 860. 柠檬水找零 // 1342. 将数字变成 0 的操作次数 |
| 任务类 | 621. 任务调度器 // 1705. 吃苹果的最大数目 |
| 矩形类 | 1630. 等差子数组 // 870. 优势洗牌 // 1262. 可被三整除的最大和 |
推荐阅读 (欢迎投稿)
贪心问题汇总 by FennelDumplings
贪心题型总结 by AC 自动机
贪心算法(Java) by liweiwei1419
贪心算法精讲 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 冒泡排序 | 912. 排序数组 |
| 选择排序 | 215. 数组中的第K个最大元素 |
| 插入排序 | 147. 对链表进行插入排序 |
| 快速排序 | 973. 最接近原点的 K 个点 |
| 归并排序 | 23. 合并 K 个升序链表 |
| 堆排序 | 347. 前 K 个高频元素 |
| 桶排序 | 1648. 销售价值减少的颜色球 // 220. 存在重复元素 III |
| 计数排序 | 75. 颜色分类 |
| 推荐阅读 (欢迎投稿) | |
| 排序算法图文学 by 力扣 (LeetBook) |
| 题目分类 | 题目编号 |
|---|---|
| 字符串匹配算法 | Rabin-Karp 算法: 28. 找出字符串中第一个匹配项的下标 // KMP 算法: 214. 最短回文串 // Boyer-Moore 算法: 819. 最常见的单词 |
| 字符串排序算法 | 75. 颜色分类 // 451. 根据字符出现频率排序 // 179. 最大数 // 937. 重新排列日志文件 |
| 字符串压缩算法 | Run-Length 编码:443. 压缩字符串 // 哈夫曼编码:297. 二叉树的序列化与反序列化 |
| 字符串搜索算法 | 17. 电话号码的字母组合 // 22. 括号生成 // 30. 串联所有单词的子串 |
| 字符串编辑距离算法 | 583. 两个字符串的删除操作 // 1143. 最长公共子序列 |
| 正则表达式 | 10. 正则表达式匹配 // 65. 有效数字 |
| 暴力算法 | 14. 最长公共前缀 // 125. 验证回文串 // 344. 反转字符串 |
| 推荐阅读 (欢迎投稿) |
注:对二叉树进行遍历时,除了使用递归的方法以外,建议尝试使用非递归的方法。面试常考,并且能加深自己对知识点的理解。
推荐阅读 (欢迎投稿)
二叉树的遍历(深度优先/广度优先 递归/非递归 层序遍历)详解 by
bitkevin
史上最全遍历二叉树详解 by golandscape
一篇文章解决所有二叉树路径问题(问题分析+分类模板+题目剖析) by 星晴pro
匹配类二叉树题目总结 by 腐烂的橘子
红黑树杀人事件始末 by 公众号_码海
二叉查找树 (树ADT连载 3/13) by yukiyama
AVL树 (树ADT连载 4/13) by yukiyama
splay树 (树ADT连载 5/13) by yukiyama
红黑树从入门到看开 by yukiyama
树状数组从入门到下车 by yukiyama
线段树从入门到急停 by yukiyama
普通树 by 力扣 (LeetBook)
二叉搜索树 by 力扣 (LeetBook)
N 叉树 by 力扣 (LeetBook)
推荐阅读 (欢迎投稿)
一文学会动态规划解题技巧 by 公众号_码海
一篇文章吃透背包问题!(细致引入+解题模板+例题分析+代码呈现) by 星晴pro
分享|深度讲解背包问题:面试中每五道动态规划就有一道是背包模型 ... by 宫水三叶
动态规划基础模型精讲 by 力扣 (LeetBook)
动态规划背包问题精讲 by 力扣 (LeetBook)
动态规划图文学:线性 & 区间动态 by 力扣 (LeetBook)
动态规划图文学:状压、计数 & 数位动态 by 力扣 (LeetBook)
动态规划图文学: 树形、图上、概率 & 博弈动态 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 图的表示 | 329. 矩阵中的最长递增路径 // 1579.保证图可完全遍历 // 210. 课程表 II // 980. 不同路径 // 1128. 等价多米诺骨牌对的数量 // 133. 克隆图 // 1743. 从相邻元素对还原数组 |
| 广度优先搜索(BFS) | 127. 单词接龙 // 126. 单词接龙 II // 207. 课程表 // 210. 课程表 II // 113. 路径总和 II // 542. 01 矩阵 // 200. 岛屿数量 // 117. 填充每个节点的下一个右侧节点指针 II // 130. 被围绕的区域 // 1091. 二进制矩阵中的最短路径 // 752. 打开转盘锁 // 733. 图像渲染 // 102. 二叉树的层序遍历 // 429. N 叉树的层序遍历 |
| 深度优先搜索(DFS) | 130. 被围绕的区域 // 417. 太平洋大西洋水流问题 // 200. 岛屿数量 // 104. 二叉树的最大深度 // 463. 岛屿的周长 // 695. 岛屿的最大面积 // 827. 最大人工岛 // 1219. 黄金矿工 // 690. 员工的重要性 // 113. 路径总和 II // 226. 翻转二叉树 // 129. 求根节点到叶节点数字之和 |
| 最小生成树问题 | 1584. 连接所有点的最小费用 // 1131. 绝对值表达式的最大值 // 1631. 最小体力消耗路径 // 1489. 找到最小生成树里的关键边和伪关键边 |
| 最短路径问题 | 743. 网络延迟时间 // 127. 单词接龙 // 787. K 站中转内最便宜的航班// 994. 腐烂的橘子 // 882. 细分图中的可到达节点 // 1030. 距离顺序排列矩阵单元格 // 1162. 地图分析 // 1631. 最小体力消耗路径 |
| 图的连通性 | 785. 判断二分图 // 面试题 04.01. 节点间通路 // 547. 省份数量 // 886. 可能的二分法 // 959. 由斜杠划分区域 // 990. 等式方程的可满足性 |
推荐阅读 (欢迎投稿)
| 题目分类 | 题目编号 |
|---|---|
| 固定窗口大小的滑动窗口问题 | 76. 最小覆盖子串 // 3. 无重复字符的最长子串 // 567. 字符串的排列 // 438. 找到字符串中所有字母异位词 // 1763. 最长的美好子字符串 // 446. 等差数列划分 II - 子序列 // 718. 最长重复子数组 // 239. 滑动窗口最大值 // 480. 滑动窗口中位数 // 128. 最长连续序列 // 346. 数据流中的移动平均值 |
| 不固定窗口大小的滑动窗口问题 | 209. 长度最小的子数组 // 674. 最长连续递增序列 // 943. 最短超级串 // 904. 水果成篮 // 632. 最小区间 // 560. 和为 K 的子数组 // 395. 至少有 K 个重复字符的最长子串 // 862. 和至少为 K 的最短子数组 |
推荐阅读 (欢迎投稿)
滑动窗口 by powcai
滑动窗口和双指针 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 普通二分查找 | 704. 二分查找 // 69. x 的平方根 // 35. 搜索插入位置 // 153. 寻找旋转排序数组中的最小值 // 367. 有效的完全平方数 // 50. Pow(x, n) // 278. 第一个错误的版本 // 4. 寻找两个正序数组的中位数 // 167. 两数之和 II - 输入有序数组 // 744. 寻找比目标字母大的最小字母 // 162. 寻找峰值 |
| 查找区间 | 34. 在排序数组中查找元素的第一个和最后一个位置 // 658. 找到 K 个最接近的元素 // 278. 第一个错误的版本 // 74. 搜索二维矩阵 |
| 旋转排列数组 | 33. 搜索旋转排序数组 // 81. 搜索旋转排序数组 II // 240. 搜索二维矩阵 II // 48. 旋转图像 // 448. 找到所有数组中消失的数字 // 154. 寻找旋转排序数组中的最小值 II |
推荐阅读 (欢迎投稿)
写对二分查找不是套模板并往里面填空,需要仔细分析题意 by liweiwei1419
二分查找 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 对撞指针问题 | 1. 两数之和 // 344. 反转字符串 // 345. 反转字符串中的元音字母 // 125. 验证回文串 // 11. 盛最多水的容器 // 15. 三数之和 // 18. 四数之和 // 167. 两数之和 II - 输入有序数组 // 88. 合并两个有序数组 // 283. 移动零 // 27. 移除元素 // 455. 分发饼干 // 561. 数组拆分 // 9. 回文数 |
| 快慢指针问题 | 876. 链表的中间结点 // 206. 反转链表 // 19. 删除链表的倒数第 N 个结点 // 141. 环形链表 // 142. 环形链表 II // 21. 合并两个有序链表 // 26. 删除有序数组中的重复项 // 83. 删除排序链表中的重复元素 // 82. 删除排序链表中的重复元素 II // 86. 分隔链表 // 234. 回文链表 |
| 滑动窗口问题 | 209. 长度最小的子数组 // 5. 最长回文子串 // 76. 最小覆盖子串 // 283. 移动零 // 80. 删除有序数组中的重复项 II // 561. 数组拆分 // 457. 环形数组是否存在循环 // 718. 最长重复子数组 |
推荐阅读 (欢迎投稿)
滑动窗口和双指针 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 一维数组的前缀和 | 560. 和为 K 的子数组 // 930. 和相同的二元子数组 // 525. 连续数组 // 974. 和可被 K 整除的子数组 // 523. 连续的子数组和 // 1248. 统计「优美子数组」 |
| 二维数组的前缀和 | 304. 二维区域和检索 - 矩阵不可变 // 1314. 矩阵区域和 // 1074. 元素和为目标值的子矩阵数量 // 363. 矩形区域不超过 K 的最大数值和 |
| 前缀和与二叉树 | 437. 路径总和 III // 1022. 从根到叶的二进制数之和 // 129. 求根节点到叶节点数字之和 |
推荐阅读 (欢迎投稿)
前缀和 by 力扣 (LeetBook)
| 题目分类 | 题目编号 |
|---|---|
| 位运算的基本运算 | 136. 只出现一次的数字 // 190. 颠倒二进制位 // 191. 位1的个数 // 201. 数字范围按位与 // 338. 比特位计数 |
| 位运算的技巧 | 260. 只出现一次的数字 III // 342. 4的幂 // 371. 两整数之和 |
| 布隆过滤器 | 705. 设计哈希集合 // 706. 设计哈希映射 // 1044. 最长重复子串 // 211. 添加与搜索单词 - 数据结构设计 |
推荐阅读 (欢迎投稿)