2026秋招Leetcode刷题记录
2025秋招刷题记录
- 数据结构
- 数组 ✅ 2025/9/4
- 链表
- 栈
- 队列
- 哈希表 ✅ 2025/8/19
- 树
- 二叉树
- 二叉搜索树(BST)
- 平衡树(AVL / 红黑树)
- 图
- 算法
- 查找
- 排序 ✅ 2025/8/18
- 贪心
- 动态规划
数据结构
数组 ✅ 2025/9/4
常见考点:前缀和(区间和查询)、差分数组(批量区间修改)、二分查找(变种:找插入位置、旋转数组找最小值)、指针(三数之和、移除元素)、滑动窗口(子数组最大和、最长无重复子串)、多维数组
- 指针:
- Leetcode 283. 移动零 指针
- Leetcode 11. 盛最多水的容器 双指针
- Leetcode 15. 三数之和 排序+双指针
- Leetcode 42. 接雨水 经典面试题 双指针/动态规划
2. 滑动窗口
- Leetcode 3. 无重复字符的最长子串 滑动窗口 2024重做
- Leetcode 438. 找到字符串中所有字母异位词
3.普通数组
- Leetcode 56. 合并区间 贪心
- Leetcode 189. 轮转数组
- Leetcode 238. 除自身以外数组的乘积
- Leetcode 41. 缺失的第一个正数 哈希
4. 二维数组(矩阵)
- Leetcode 73. 矩阵置零
- Leetcode 54. 螺旋矩阵
- Leetcode 48. 旋转图像
- Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分
链表
常见考点:反转链表(全反转、部分反转)、环检测与入口查找(快慢指针)、删除倒数第 k 个节点、合并有序链表(递归 / 迭代)
- Leetcode 160. 相交链表 指针
- Leetcode 206. 反转链表 迭代/递归
- Leetcode 876. 链表的中间结点 快慢指针
- Leetcode 234. 回文链表
- Leetcode 141. 环形链表 快慢指针
- Leetcode 142. 环形链表 II 快慢指针
- Leetcode 21. 合并两个有序链表 (递归 / 迭代)
- Leetcode 2. 两数相加 链表
- Leetcode 19. 删除链表的倒数第 N 个结点 链表
栈
常见考点:括号匹配、逆波兰表达式求值、单调栈
队列
常见考点:滑动窗口最大值(单调队列)、用栈实现队列(双栈模拟)
哈希表 ✅ 2025/8/19
常见考点:两数之和、数组交集、有效的字母异位词(计数哈希)、LRU 缓存(哈希表 + 双向链表,O (1) 读写)、哈希冲突处理(链地址法 vs 开放寻址法)
- Leecode 1.两数之和 O(n)解法 哈希
- Leecode 49. 字母异位词分组
- Leetcode 128. 最长连续序列 哈希
树
二叉树
常见考点:前 / 中 / 后序遍历(递归 + 迭代实现)、层序遍历(BFS)、从前序 + 中序、后序 + 中序还原二叉树、对称二叉树、平衡二叉树判断、二叉树直径 / 深度计算
二叉搜索树(BST)
常见考点:查找、插入、删除(按中序遍历有序特性)、验证 BST 合法性、找第 k 小元素、最近公共祖先(LCA)
平衡树(AVL / 红黑树)
常见考点:
- AVL 树:平衡因子(左右子树高度差≤1)、旋转操作(LL/LR/RR/RL)
- 红黑树:5 条核心性质(根黑、叶黑、红节点子黑、路径黑节点数相同)、插入删除修复。
图
常见考点:
- DFS(路径搜索、连通分量)、BFS(最短路径、层次遍历)
- Dijkstra(单源最短路径,堆优化)、Floyd(多源最短路径,动态规划)
- 拓扑排序(判断有向图环、课程表问题)
- 并查集(朋友圈、岛屿数量,路径压缩 + 按秩合并优化)
算法
查找
- 二分查找:变种(找左 / 右边界、旋转数组搜索)、非数组场景(平方根计算、山脉数组峰值)。
DFS/BFS: - DFS:回溯法(子集、排列、组合总和)、记忆化剪枝。
- BFS:最短路径(无权图)、层次遍历(树 / 图的层级访问)。
排序 ✅ 2025/8/18
参考:【算法】经典排序算法介绍+代码示例
- 冒泡排序: 通过重复遍历待排序序列,比较相邻元素并根据他们的小大交换他们,小的在前大的最后,最后使较大的元素逐渐“冒泡”到序列的末尾
- 选择排序: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 插入排序: 将待排序元素插入到已排序序列的适当位置,类似于扑克牌整理
- 希尔排序: 希尔排序(Shell Sort)是插入排序的变种,它是针对直接插入排序算法的改进,又称缩小增量法,是第一个突破O(n²)的排序算法,将整个待排序序列按一定间隔分组,分割成若干个子序列,对每个子序列进行插入排序,然后逐步缩小间隔直至1,直至整个序列有序。
- 归并排序: 一种基于分治法的高效排序算法,它的核心思想是将待排序的数组不断二分,递归地对每个子数组进行排序,最后将两个已排序的子数组合并成一个有序的整体
- 快速排序: 一种基于分治法的高效排序算法,它的核心思想是选择一个基准,将待排序的数组根据基准不断分割成独立的两部分(左和右),使得左部元素均小于等于基准、右部均大于等于基准,递归地对每个子部分进行排序,以达到整个序列有序
- 计数排序: 计数排序是一种非比较型排序算法,它利用额外的空间来记录每个元素出现的次数,核心思想是将输入的数据值转化为键存储在额外开辟的数组空间a中,键为元素,值为出现的次数,遍历该数组a即可得到排序数组。计数排序是线性时间复杂度的排序,适用于一定范围内的整数排序,尤其是当数据范围较小时,其效率非常高。
- 桶排序: 桶排序(Bucket Sort)是一种分配式排序算法,适用于数据分布均匀且范围已知的情况。它的核心思想是将待排序的数据分到有限数量的桶中,每个桶内的数据单独排序,最后将所有桶中的数据合并得到有序序列。
- 堆排序: ❌
贪心
- 区间调度(最多不重叠区间、用最少箭头射爆气球)。
- 哈夫曼编码(最优前缀码,贪心选择最小权重合并)。
- 零钱兑换(当硬币为特定面额时,如美元硬币,可用贪心)。
动态规划
- 背包问题(0-1 背包、完全背包,状态转移方程)。
- 字符串问题(最长公共子序列 LCS、编辑距离)。
- 数组问题(最长递增子序列 LIS、最大子数组和)。
1. 基础题目
- Leecode 70. 爬楼梯 DP/矩阵快速幂
- Leetcode 746. 使用最小花费爬楼梯
- Leetcode 343. 整数拆分 动态规划
- Leetcode 96. 不同的二叉搜索树 动态规划
- Leetcode 62. 不同路径 动态规划+空间优化
- Leetcode 63. 不同路径 II 动态规划
2. 背包问题
动态规划之背包问题详细介绍(0-1背包,完全背包)
0-1背包:
- Leetcode 416. 分割等和子集 (动态规划-01背包问题)
- Leetcode 1049. 最后一块石头的重量 II 动态规划-01背包
- Leetcode 494. 目标和 动态规划-01背包
- Leetcode 474. 一和零 动态规划 01背包问题
完全背包:
- Leetcode 139. 单词拆分 动态规划
- Leetcode 279. 完全平方数 动态规划 完全背包问题
- Leetcode 322. 零钱兑换 动态规划
- Leetcode 518. 零钱兑换 II 动态规划
- Leetcode 377. 组合总和 Ⅳ 动态规划
3. 子序列问题:
回文:
- Leetcode 647. 回文子串 动态规划
- Leetcode 5. 最长回文子串 经典动态规划
- Leetocde516. 最长回文子序列 动态规划
子序列 / 子数组:
- Leetcode 53. 最大子数组和 经典dp
- Leetcode 1143. 最长公共子序列 经典DP
- Leetcode 300. 最长递增子序列 动态规划 / 贪心 + 二分查找(待补充)
编辑距离:
- Leetcode 72. 编辑距离 动态规划
4. 打家劫舍:
- Leetcode 198. 打家劫舍 动态规划
- Leetcode 213. 打家劫舍 II 动态规划
5. 股票问题:
6. 其他问题
- Leetcode 152. 乘积最大子数组 DP
- Leetcode 32. 最长有效括号 栈/动态规划/计数器