💾 algorithm 是一个数据结构与算法学习笔记。
掌握数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。
- 🔁 项目同步维护:Github | Gitee
- 📖 电子书阅读:Github Pages | Gitee Pages
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 1290. 二进制链表转整数 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 141. 环形链表 | 💚 | ✔️ |
| 142. 环形链表 II | 💛 | ✔️ |
| 160. 相交链表 | 💚 | ✔️ |
| 19. 删除链表的倒数第 N 个结点 | 💛 | ✔️ |
| 21. 合并两个有序链表 | 💚 | ✔️ |
| 23. 合并 K 个升序链表 | ❤️ | ✔️ |
| 86. 分隔链表 | 💛 | ✔️ |
| 876. 链表的中间结点 | 💚 | ✔️ |
| 面试题 02. 返回倒数第 k 个节点 | 💚 | ✔️ |
| 面试题 02.01. 移除重复节点 | 💚 | ✔️ |
| 203. 移除链表元素 | 💚 | ✔️ |
| 328. 奇偶链表 | 💛 | ✔️ |
| LCR 136. 删除链表的节点 | 💚 | ✔️ |
| 83. 删除排序链表中的重复元素 | 💚 | ✔️ |
| 82. 删除排序链表中的重复元素 II | 💛 | ✔️ |
| 2. 两数相加 | 💛 | ✔️ |
| 445. 两数相加 II | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 61. 旋转链表 | 💛 | ✔️ |
| 206. 反转链表 | 💚 | ✔️ |
| 92. 反转链表 II | 💛 | ✔️ |
| 25. K 个一组翻转链表 | ❤️ | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 148. 排序链表 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 234. 回文链表 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 485. 最大连续 1 的个数 | 💚 | ✔️ |
| 747. 至少是其他数字两倍的最大数 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 27. 移除元素 | 💚 | ✔️ |
| 283. 移动零 | 💚 | ✔️ |
| LCR 179. 查找总价格为目标值的两个商品 | 💚 | ✔️ |
| 1. 两数之和 | 💚 | ✔️ |
| 67. 二进制求和 | 💚 | ✔️ |
| 167. 两数之和 II - 输入有序数组 LCR 006. 两数之和 II - 输入有序数组 |
💛 | ✔️ |
| 26. 删除有序数组中的重复项 | 💚 | ✔️ |
| 80. 删除有序数组中的重复项 II | 💛 | ✔️ |
| 344. 反转字符串 | 💚 | ✔️ |
| 125. 验证回文串 | 💚 | ✔️ |
| 5. 最长回文子串 | 💛 | ✔️ |
| 75. 颜色分类 | 💛 | ✔️ |
| 88. 合并两个有序数组 | 💚 | ✔️ |
| 977. 有序数组的平方 | 💚 | ✔️ |
| 1329. 将矩阵按对角线排序 | 💛 | ✔️ |
| 1260. 二维网格迁移 | 💚 | ✔️ |
| 867. 转置矩阵 | 💚 | ✔️ |
| 14. 最长公共前缀 | 💚 | ✔️ |
| 15. 三数之和 | 💛 | ❗ |
| 56. 合并区间 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 151. 反转字符串中的单词 | 💛 | ✔️ |
| 48. 旋转图像 | 💛 | ✔️ |
| 54. 螺旋矩阵 LCR 146. 螺旋遍历二维数组 |
💛 | ✔️ |
| 59. 螺旋矩阵 II | 💛 | ✔️ |
| 498. 对角线遍历 | 💛 | ❌ |
| 面试题 01.08. 零矩阵 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 3. 无重复字符的最长子串 | 💛 | ✔️ |
| 438. 找到字符串中所有字母异位词 | 💛 | ✔️ |
| 567. 字符串的排列 | 💛 | ✔️ |
| 76. 最小覆盖子串 | ❤️ | ✔️ |
| 1658. 将 x 减到 0 的最小操作数 | 💛 | ✔️ |
| 713. 乘积小于 K 的子数组 | 💛 | ✔️ |
| 1004. 最大连续 1 的个数 III | 💛 | ✔️ |
| 424. 替换后的最长重复字符 | 💛 | ✔️ |
| 217. 存在重复元素 | 💚 | ✔️ |
| 219. 存在重复元素 II | 💛 | ✔️ |
| 220. 存在重复元素 III | ❤️ | ❌ |
| 209. 长度最小的子数组 | 💛 | ✔️ |
| 395. 至少有 K 个重复字符的最长子串 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 34. 在排序数组中查找元素的第一个和最后一个位置 | 💛 | ✔️ |
| 35. 搜索插入位置 | 💚 | ✔️ |
| 704. 二分查找 | 💚 | ✔️ |
| LCR 172. 统计目标成绩的出现次数 | 💚 | ✔️ |
| 875. 爱吃香蕉的珂珂 | 💛 | ❗ |
| 1011. 在 D 天内送达包裹的能力 | 💛 | ✔️ |
| 410. 分割数组的最大值 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 303. 区域和检索 - 数组不可变 | 💚 | ✔️ |
| 724. 寻找数组的中心下标 | 💚 | ✔️ |
| 1013. 将数组分成和相等的三个部分 | 💚 | ✔️ |
| 304. 二维区域和检索 - 矩阵不可变 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 1094. 拼车 | 💛 | ✔️ |
| 1109. 航班预订统计 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 225. 用队列实现栈 | 💚 | ✔️ |
| 933. 最近的请求次数 | 💚 | ❗ |
| 622. 设计循环队列 | 💛 | ❌ |
| 641. 设计循环双端队列 | 💛 | ❌ |
| 1670. 设计前中后队列 | 💛 | ❌ |
| 2073. 买票需要的时间 | 💚 | ✔️ |
| 373. 查找和最小的 K 对数字 | 💛 | ❌ |
| 378. 有序矩阵中第 K 小的元素 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 20. 有效的括号 | 💚 | ✔️ |
| 232. 用栈实现队列 | 💚 | ✔️ |
| 682. 棒球比赛 | 💚 | ✔️ |
| 844. 比较含退格的字符串 | 💚 | ✔️ |
| 71. 简化路径 | 💛 | ✔️ |
| 143. 重排链表 | 💛 | ✔️ |
| 150. 逆波兰表达式求值 | 💛 | ✔️ |
| 388. 文件的最长绝对路径 | 💛 | ❌ |
| 155. 最小栈 | 💛 | ✔️ |
| 面试题 03.05. 栈排序 | 💛 | ✔️ |
| 895. 最大频率栈 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 496. 下一个更大元素 I | 💚 | ✔️ |
| 503. 下一个更大元素 II | 💛 | ✔️ |
| 739. 每日温度 剑指 Offer II 038. 每日温度 |
💛 | ✔️ |
| 1019. 链表中的下一个更大节点 | 💛 | ✔️ |
| 1944. 队列中可以看到的人数 | ❤️ | ❌ |
| 1475. 商品折扣后的最终价格 | 💛 | ✔️ |
| 901. 股票价格跨度 | 💛 | ❌ |
| 402. 移掉 K 位数字 | 💛 | ❌ |
| 853. 车队 | 💛 | ❌ |
| 581. 最短无序连续子数组 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| LCR 184. 设计自助结算系统 | 💛 | ❌ |
| 239. 滑动窗口最大值 | ❤️ | ❌ |
| 1438. 绝对差不超过限制的最长连续子数组 | 💛 | ❌ |
| 862. 和至少为 K 的最短子数组 | ❤️ | ❌ |
| 918. 环形子数组的最大和 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 104. 二叉树的最大深度 | 💚 | ✔️ |
| 111. 二叉树的最小深度 | 💚 | ✔️ |
| 543. 二叉树的直径 | 💚 | ✔️ |
| 114. 二叉树展开为链表 | 💛 | ✔️ |
| 226. 翻转二叉树 | 💚 | ✔️ |
| 654. 最大二叉树 | 💛 | ✔️ |
| 297. 二叉树的序列化与反序列化 | ❤️ | ❗ |
| 222. 完全二叉树的节点个数 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 144. 二叉树的前序遍历 | 💚 | ✔️ |
| 94. 二叉树的中序遍历 | 💚 | ✔️ |
| 145. 二叉树的后序遍历 | 💚 | ✔️ |
| 872. 叶子相似的树 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 257. 二叉树的所有路径 | 💚 | ✔️ |
| 129. 求根节点到叶节点数字之和 | 💛 | ✔️ |
| 199. 二叉树的右视图 | 💛 | ✔️ |
| 988. 从叶结点开始的最小字符串 | 💛 | ✔️ |
| 1022. 从根到叶的二进制数之和 | 💚 | ✔️ |
| 1457. 二叉树中的伪回文路径 | 💛 | ✔️ |
| 404. 左叶子之和 | 💚 | ✔️ |
| 623. 在二叉树中增加一行 | 💛 | ✔️ |
| 508. 出现次数最多的子树元素和 | 💛 | ✔️ |
| 563. 二叉树的坡度 | 💚 | ✔️ |
| 814. 二叉树剪枝 | 💛 | ✔️ |
| 1325. 删除给定值的叶子节点 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 105. 从前序与中序遍历序列构造二叉树 | 💛 | ✔️ |
| 106. 从中序与后序遍历序列构造二叉树 | 💛 | ✔️ |
| 889. 根据前序和后序遍历构造二叉树 | 💛 | ✔️ |
| 331. 验证二叉树的前序序列化 | 💛 | ❌ |
| 894. 所有可能的真二叉树 | 💛 | ❌ |
| 998. 最大二叉树 II | 💛 | ❌ |
| 1110. 删点成林 | 💛 | ❌ |
| 100. 相同的树 | 💛 | ✔️ |
| 101. 对称二叉树 | 💛 | ✔️ |
| 951. 翻转等价二叉树 | 💛 | ✔️ |
| 124. 二叉树中的最大路径和 | ❤️ | ❌ |
| 236. 二叉树的最近公共祖先 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 102. 二叉树的层序遍历 | 💛 | ✔️ |
| 107. 二叉树的层序遍历 II | 💛 | ✔️ |
| 103. 二叉树的锯齿形层序遍历 | 💛 | ✔️ |
| 116. 填充每个节点的下一个右侧节点指针 | 💛 | ✔️ |
| 117. 填充每个节点的下一个右侧节点指针 II | 💛 | ✔️ |
| 662. 二叉树最大宽度 | 💛 | ✔️ |
| 515. 在每个树行中找最大值 | 💛 | ✔️ |
| 637. 二叉树的层平均值 | 💚 | ✔️ |
| 958. 二叉树的完全性检验 | 💛 | ✔️ |
| 1161. 最大层内元素和 | 💛 | ✔️ |
| 1302. 层数最深叶子节点的和 | 💛 | ✔️ |
| 1609. 奇偶树 | 💛 | ✔️ |
| 919. 完全二叉树插入器 | 💛 | ✔️ |
| 863. 二叉树中所有距离为 K 的结点 | 💛 | ❌ |
| LCR 149. 彩灯装饰记录 I | 💛 | ✔️ |
| LCR 150. 彩灯装饰记录 II | 💚 | ✔️ |
| LCR 151. 彩灯装饰记录 III | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 1038. 从二叉搜索树到更大和树 | 💛 | ✔️ |
| 230. 二叉搜索树中第 K 小的元素 | 💛 | ✔️ |
| 538. 把二叉搜索树转换为累加树 | 💛 | ✔️ |
| 450. 删除二叉搜索树中的节点 | 💛 | ✔️ |
| 700. 二叉搜索树中的搜索 | 💚 | ✔️ |
| 701. 二叉搜索树中的插入操作 | 💛 | ✔️ |
| 98. 验证二叉搜索树 | 💛 | ✔️ |
| 96. 不同的二叉搜索树 | 💛 | ❌ |
| 95. 不同的二叉搜索树 II | 💛 | ❌ |
| 108. 将有序数组转换为二叉搜索树 | 💚 | ✔️ |
| 783. 二叉搜索树节点最小距离 | 💚 | ✔️ |
| 235. 二叉搜索树的最近公共祖先 | 💛 | ❌ |
| 1373. 二叉搜索子树的最大键值和 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 429. N 叉树的层序遍历 | 💛 | ✔️ |
| 559. N 叉树的最大深度 | 💚 | ✔️ |
| 589. N 叉树的前序遍历 | 💚 | ✔️ |
| 590. N 叉树的后序遍历 | 💚 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 797. 所有可能的路径 | 💛 | ❗ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 207. 课程表 | 💛 | ❌ |
| 210. 课程表 II | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 785. 判断二分图 LCR 106. 判断二分图 |
💛 | ❌ |
| 886. 可能的二分法 | 💛 | ❗ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 130. 被围绕的区域 | 💛 | ❌ |
| 684. 冗余连接 | 💛 | ✔️ |
| 990. 等式方程的可满足性 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 743. 网络延迟时间 | 💛 | ❌ |
| 1631. 最小体力消耗路径 | 💛 | ❌ |
| 1514. 概率最大的路径 | 💛 | ❌ |
| 787. K 站中转内最便宜的航班 | 💛 | ❌ |
| 1368. 使网格图至少有一条有效路径的最小代价 | ❤️ | ❌ |
子集、组合、排列相关问题,都可以考虑使用回溯算法求解。
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 46. 全排列 | 💛 | ✔️ |
| 47. 全排列 II | 💛 | ✔️ |
| 78. 子集 | 💛 | ✔️ |
| 90. 子集 II | 💛 | ✔️ |
| 77. 组合 | 💛 | ✔️ |
| 39. 组合总和 | 💛 | ✔️ |
| 40. 组合总和 II | 💛 | ✔️ |
| 216. 组合总和 III | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 200. 岛屿数量 | 💛 | ❗ |
| 1254. 统计封闭岛屿的数目 | 💛 | ❗ |
| 1020. 飞地的数量 | 💛 | ❗ |
| 695. 岛屿的最大面积 | 💛 | ❗ |
| 1905. 统计子岛屿 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 37. 解数独 | ❤️ | ❌ |
| 51. N 皇后 | ❤️ | ❌ |
| 52. N皇后 II | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 967. 连续差相同的数字 | 💛 | ❌ |
| 491. 非递减子序列 | 💛 | ❌ |
| 980. 不同路径 III | ❤️ | ❌ |
| 526. 优美的排列 | 💛 | ❌ |
| 131. 分割回文串 | 💛 | ❌ |
| 93. 复原 IP 地址 | 💛 | ❌ |
| 89. 格雷编码 | 💛 | ❌ |
| 17. 电话号码的字母组合 | 💛 | ❌ |
| 79. 单词搜索 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 752. 打开转盘锁 | 💛 | ❌ |
| 773. 滑动谜题 | ❤️ | ❌ |
| 919. 完全二叉树插入器 | 💛 | ✔️ |
| 841. 钥匙和房间 | 💛 | ✔️ |
| 433. 最小基因变化 | 💛 | ❗ |
| 1926. 迷宫中离入口最近的出口 | 💛 | ✔️ |
| 1091. 二进制矩阵中的最短路径 | 💛 | ✔️ |
| 994. 腐烂的橘子 | 💛 | ✔️ |
| 365. 水壶问题 | 💛 | ❌ |
| 721. 账户合并 | 💛 | ❌ |
| 127. 单词接龙 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 509. 斐波那契数 | 💚 | ✔️ |
| 1137. 第 N 个泰波那契数 | 💚 | ✔️ |
| 70. 爬楼梯 | 💚 | ✔️ |
| 746. 使用最小花费爬楼梯 | 💚 | ✔️ |
| 198. 打家劫舍 | 💛 | ✔️ |
| 740. 删除并获得点数 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 2140. 解决智力问题 | 💛 | ❌ |
| 2466. 统计构造好字符串的方案数 | 💛 | ❌ |
| 91. 解码方法 | 💛 | ❌ |
| 983. 最低票价 | 💛 | ❌ |
| 264. 丑数 II | 💛 | ❗ |
| 1201. 丑数 III | 💛 | ❌ |
| 313. 超级丑数 | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 118. 杨辉三角 | 💚 | ✔️ |
| 119. 杨辉三角 II | 💚 | ✔️ |
| 62. 不同路径 | 💛 | ✔️ |
| 63. 不同路径 II | 💛 | ✔️ |
| 64. 最小路径和 | 💛 | ✔️ |
| 120. 三角形最小路径和 | 💛 | ✔️ |
| 931. 下降路径最小和 | 💛 | ✔️ |
| 221. 最大正方形 | 💛 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 5. 最长回文子串 | 💛 | ✔️ |
| 139. 单词拆分 | 💛 | ❌ |
| 72. 编辑距离 | 💛 | ❗ |
| 583. 两个字符串的删除操作 | 💛 | ❌ |
| 712. 两个字符串的最小ASCII删除和 | 💛 | ❌ |
| 516. 最长回文子序列 | 💛 | ❌ |
| 115. 不同的子序列 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 300. 最长递增子序列 | 💛 | ❌ |
| 673. 最长递增子序列的个数 | 💛 | ❌ |
| 646. 最长数对链 | 💛 | ✔️ |
| 1218. 最长定差子序列 | 💛 | ❌ |
| 1027. 最长等差数列 | 💛 | ❌ |
| 1143. 最长公共子序列 | 💛 | ❗ |
| 1035. 不相交的线 | 💛 | ❌ |
| 1312. 让字符串成为回文串的最少插入次数 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 416. 分割等和子集 | 💛 | ❌ |
| 322. 零钱兑换 | 💛 | ❌ |
| 518. 零钱兑换 II | 💛 | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 53. 最大子数组和 | 💛 | ❌ |
| 354. 俄罗斯套娃信封问题 | ❤️ | ❌ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 561. 数组拆分 | 💚 | ❌ |
| 55. 跳跃游戏 | 💛 | ❌ |
| 45. 跳跃游戏 II | 💛 | ❌ |
| 题目 | 掌握度 |
|---|---|
| 23. 合并 K 个升序链表 | ✔️ |
| 题目 | 难度 | 掌握度 |
|---|---|---|
| 66. 加一 | 💚 | ✔️ |
| 263. 丑数 | 💚 | ✔️ |
- 书籍
- 刷题必备
- 《剑指 offer》
- 《编程之美》
- 《编程之法:面试和算法心得》
- 《算法谜题》 都是思维题
- 基础
- 算法设计
- 《算法设计与分析基础(第 3 版)》
- 《Algorithm Design Manual》 - 算法设计手册 红皮书
- 《算法导论》 - 是一本对算法介绍比较全面的经典书籍
- 《Algorithms on Strings,Trees and Sequences》
- 《Advanced Data Structures》 - 各种诡异高级的数据结构和算法 如元胞自动机、斐波纳契堆、线段树 600 块
- 刷题必备
- 学习网站
- https://labuladong.online/algo/
- https://github.com/TheAlgorithms/Java
- https://github.com/nonstriater/Learn-Algorithms
- https://github.com/trekhleb/javascript-algorithms
- https://github.com/wangzheng0822/algo
- https://github.com/kdn251/interviews/blob/master/README-zh-cn.md#%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84
- July 博客
- 《数学建模十大经典算法》
- 《数据挖掘领域十大经典算法》
- 《十道海量数据处理面试题》
- 《数字图像处理领域的二十四个经典算法》
- 《精选微软等公司经典的算法面试 100 题》
- The-Art-Of-Programming-By-July
- 微软面试 100 题
- 程序员编程艺术
- 基本算法演示
- 编程网站
- 教程
- 高级数据结构和算法 北大教授张铭老师在 coursera 上的课程。完成这门课之时,你将掌握多维数组、广义表、Trie 树、AVL 树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。当然 coursera 上也还有很多其它算法方面的视频课程。
- 算法设计与分析 Design and Analysis of Algorithms 由北大教授 Wanling Qu 在 coursera 讲授的一门算法课程。首先介绍一些与算法有关的基础知识,然后阐述经典的算法设计思想和分析技术,主要涉及的算法设计技术是:分治策略、动态规划、贪心法、回溯与分支限界等。每个视频都配有相应的讲义(pdf 文件)以便阅读和复习。
- 算法面试通关 40 讲
- 数据结构与算法之美
- Data Structures - Computer Science Course for Beginners - 高赞 YouTube 视频教程
| 技术文档归档 | 算法和数据结构教程系列 |
