Skip to content

dunwu/algorithm-tutorial

 
 

Repository files navigation

logo

star fork build code style

ALGORITHM

💾 algorithm 是一个数据结构与算法学习笔记。

掌握数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。

📖 内容

img

💻 刷题

链表

基础操作

题目 难度 掌握度
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. 完全二叉树的节点个数 💚 ✔️

DFS

题目 难度 掌握度
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. 二叉搜索子树的最大键值和 ❤️

N 叉树

题目 难度 掌握度
429. N 叉树的层序遍历 💛 ✔️
559. N 叉树的最大深度 💚 ✔️
589. N 叉树的前序遍历 💚 ✔️
590. N 叉树的后序遍历 💚 ✔️

BFS/DFS

题目 难度 掌握度
797. 所有可能的路径 💛

环检测及拓扑排序算法

题目 难度 掌握度
207. 课程表 💛
210. 课程表 II 💛

二分图判定算法

题目 难度 掌握度
785. 判断二分图
LCR 106. 判断二分图
💛
886. 可能的二分法 💛

并查集算法

题目 难度 掌握度
130. 被围绕的区域 💛
684. 冗余连接 💛 ✔️
990. 等式方程的可满足性 💛 ✔️

Dijkstra 算法

题目 难度 掌握度
743. 网络延迟时间 💛
1631. 最小体力消耗路径 💛
1514. 概率最大的路径 💛
787. K 站中转内最便宜的航班 💛
1368. 使网格图至少有一条有效路径的最小代价 ❤️

DFS / 回溯算法

排列、组合、子集问题

子集、组合、排列相关问题,都可以考虑使用回溯算法求解。

题目 难度 掌握度
46. 全排列 💛 ✔️
47. 全排列 II 💛 ✔️
78. 子集 💛 ✔️
90. 子集 II 💛 ✔️
77. 组合 💛 ✔️
39. 组合总和 💛 ✔️
40. 组合总和 II 💛 ✔️
216. 组合总和 III 💛 ✔️

岛屿问题

题目 难度 掌握度
200. 岛屿数量 💛
1254. 统计封闭岛屿的数目 💛
1020. 飞地的数量 💛
695. 岛屿的最大面积 💛
1905. 统计子岛屿 💛

数独、N 皇后问题

题目 难度 掌握度
37. 解数独 ❤️
51. N 皇后 ❤️
52. N皇后 II ❤️

练习

题目 难度 掌握度
967. 连续差相同的数字 💛
491. 非递减子序列 💛
980. 不同路径 III ❤️
526. 优美的排列 💛
131. 分割回文串 💛
93. 复原 IP 地址 💛
89. 格雷编码 💛
17. 电话号码的字母组合 💛
79. 单词搜索 💛

BFS

题目 难度 掌握度
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. 丑数 💚 ✔️

📚 资料

🚪 传送

| 技术文档归档 | 算法和数据结构教程系列 |

Releases

No releases published

Packages

No packages published

Languages