🌙
Skip to content
LeetCode Hot 100 题解
搜索
K
Main Navigation
首页
题目总览
知识点渐进
Appearance
LeetCode Hot 100
Python 题解 · 系统刷题 · 面试必备
76
总题数
16
简单
57
中等
3
困难
已解决 0 / 76 题(0%)
题目总览
知识点总览
难度
全部
🟢 简单
🟠 中等
🔴 困难
标签
全部
0-1 背包
BFS
BST
Boyer-Moore 投票
DFS
二分查找
位运算
分治
前缀和
前缀积
动态规划
双指针
哈希表
回溯
图
堆
字典树
字符串
完全背包
并查集
归并排序
拓扑排序
排序
数组
栈
树
滑动窗口
矩阵
组合数学
设计
贪心
递归
链表
⭐ 仅收藏
☆
#136
简单
只出现一次的数字
利用异或运算的自反性,将所有元素依次异或,出现两次的数会两两抵消为 0。
位运算
☆
#169
简单
多数元素
Boyer-Moore 投票算法:维护候选者和计数器,不同则抵消,最终剩下的就是多数元素。
数组
Boyer-Moore 投票
☆
#461
简单
汉明距离
先异或标记不同位,再用 Brian Kernighan 算法统计 1 的个数。
位运算
☆
#001
简单
两数之和
用哈希表存储已遍历的数,一次遍历即可找到互补对。
哈希表
数组
☆
#049
中等
字母异位词分组
将字符串排序后作为哈希表的键,相同字母组合映射到同一个键。
哈希表
字符串
排序
☆
#128
中等
最长连续序列
利用哈希集合实现 O(1) 查找,只从序列起点开始向右扩展。
哈希表
并查集
☆
#283
简单
移动零
快慢指针:快指针探索非零元素,慢指针标记放置位置。
数组
双指针
☆
#011
中等
盛最多水的容器
对向双指针,贪心策略:移动较短的那端,才有可能增大盛水量。
贪心
双指针
☆
#015
中等
三数之和
排序 + 双指针:固定一个数后,在其后子数组中用双指针查找两数之和。
数组
双指针
排序
☆
#020
简单
有效的括号
遇到左括号入栈,遇到右括号检查栈顶是否配对,遍历结束栈为空则合法。
栈
字符串
☆
#155
中等
最小栈
辅助栈同步记录最小值,只在更小值出现时才压入辅助栈。
栈
设计
☆
#160
简单
相交链表
双指针消除长度差:走完一条链后切换到另一条,交点处相遇。
链表
双指针
☆
#206
简单
反转链表
迭代法三指针:prev、curr、next,逐个反转指针方向。
链表
递归
☆
#021
简单
合并两个有序链表
哑节点 + 尾指针,每次比较两链表头节点,将较小的接到尾部。
链表
递归
☆
#141
简单
环形链表
Floyd 快慢指针:快指针每次两步,慢指针每次一步,有环必相遇。
链表
双指针
☆
#226
简单
翻转二叉树
递归交换每个节点的左右子树,分治思想的典型应用。
树
DFS
分治
☆
#104
简单
二叉树的最大深度
递归:max(左子树深度, 右子树深度) + 1,空节点深度为 0。
树
DFS
BFS
☆
#094
简单
二叉树的中序遍历
迭代法:一路向左压栈,弹出栈顶访问,转向右子树。
栈
树
DFS
☆
#102
中等
二叉树的层序遍历
BFS 队列逐层遍历,记录每层大小实现按层分组。
树
BFS
☆
#003
中等
无重复字符的最长子串
跳跃式滑动窗口:右指针扩张,遇到重复时左指针直接跳到重复字符之后。
哈希表
字符串
滑动窗口
☆
#438
中等
找到字符串中所有字母异位词
固定大小窗口滑动,用数组计数对比窗口与目标串的字符频率。
哈希表
滑动窗口
☆
#076
困难
最小覆盖子串
need/window 双字典 + valid 计数器,右扩左缩找最小满足条件的窗口。
哈希表
滑动窗口
☆
#053
中等
最大子数组和
Kadane 算法:dp[i] = max(dp[i-1] + nums[i], nums[i]),负前缀不如重新开始。
数组
动态规划
☆
#056
中等
合并区间
按起点排序后线性扫描,重叠区间合并为取更大终点。
数组
排序
☆
#238
中等
除自身以外数组的乘积
两次遍历:左到右记录左侧乘积,右到左乘上右侧乘积,空间 O(1)。
数组
前缀积
☆
#189
中等
轮转数组
三次翻转法:翻转全部 → 翻转前 k 个 → 翻转剩余部分。
数组
☆
#035
简单
搜索插入位置
标准二分查找,左闭右开区间,最终 left 即为插入位置。
数组
二分查找
☆
#034
中等
在排序数组中查找元素的第一个和最后一个位置
两次二分:lower_bound 找第一个 ≥ target,upper_bound 找第一个 > target。
数组
二分查找
☆
#033
中等
搜索旋转排序数组
旋转数组仍满足"一半有序",判断 mid 落在有序半边再确定 target 位置。
数组
二分查找
☆
#074
中等
搜索二维矩阵
降维映射:将二维矩阵视为一维有序数组,mid 对应 (mid//n, mid%n)。
数组
二分查找
矩阵
☆
#560
中等
和为 K 的子数组
前缀和 + 哈希表:pre[j] - pre[i] = k 等价于 pre[j] - k = pre[i]。
数组
哈希表
前缀和
☆
#394
中等
字符串解码
双栈法:数字栈管重复次数,字符串栈管层级,遇到 ] 弹出重建。
栈
字符串
递归
☆
#121
简单
买卖股票的最佳时机
维护历史最低价,每天计算当前价与最低价的差值取最大。
数组
贪心
☆
#055
中等
跳跃游戏
维护最远可达位置,遍历时若当前位置超过最远可达则无法继续。
贪心
数组
☆
#045
中等
跳跃游戏 II
维护当前跳跃边界和最远可达,到达边界时必须跳一次。
贪心
数组
☆
#763
中等
划分字母区间
先记录每个字母最后出现位置,贪心扩展直到覆盖片段内所有字符。
贪心
字符串
☆
#046
中等
全排列
经典回溯模板:选择 → 递归 → 撤销,用 used 数组去重。
回溯
数组
☆
#078
中等
子集
每个节点都是答案,start 参数确保不重复选择前面的元素。
回溯
数组
☆
#039
中等
组合总和
允许重复选同一元素(传 i 而非 i+1),remain < 0 提前返回剪枝。
回溯
数组
☆
#022
中等
括号生成
right < left 保证合法性:任何前缀中左括号数 ≥ 右括号数。
回溯
字符串
☆
#079
中等
单词搜索
DFS + 回溯:用 # 标记已访问,搜索完恢复,注意不回头(3个方向)。
回溯
矩阵
DFS
☆
#215
中等
数组中的第 K 个最大元素
维护大小为 k 的最小堆,堆满后弹出最小值,最终堆顶即第 k 大。
堆
数组
☆
#347
中等
前 K 个高频元素
Counter 统计频率 + 大小为 k 的最小堆,堆满后弹出频率最低的。
堆
哈希表
☆
#070
简单
爬楼梯
斐波那契数列:dp[i] = dp[i-1] + dp[i-2],空间优化为两个变量。
动态规划
☆
#198
中等
打家劫舍
dp[i] = max(dp[i-1], dp[i-2] + nums[i]),抢当前 vs 不抢当前。
动态规划
☆
#279
中等
完全平方数
完全背包变体:dp[i] = min(dp[i - j²] + 1),完全平方数即物品。
动态规划
完全背包
☆
#322
中等
零钱兑换
dp[i] = min(dp[i - coin] + 1),凑出金额 i 的最少硬币数。
动态规划
完全背包
☆
#300
中等
最长递增子序列
tails 数组 + 二分替换:tails[i] 表示长度 i+1 的递增子序列最小末尾。
动态规划
二分查找
☆
#142
中等
环形链表 II
快慢指针相遇后,一指针回 head,同步前进再次相遇处即入环点。
链表
双指针
☆
#148
中等
排序链表
归并排序链表版:快慢指针找中点 → 递归排序两半 → 合并有序链表。
链表
归并排序
☆
#023
困难
合并 K 个升序链表
最小堆:所有链表头节点入堆,每次弹出最小节点并将其 next 推入堆。
链表
堆
分治
☆
#146
中等
LRU 缓存
哈希表 + 双向链表 / OrderedDict,get 和 put 均 O(1)。
哈希表
链表
设计
☆
#002
中等
两数相加
逐位相加维护进位,divmod 同时得到商和余数,注意最终进位。
链表
递归
☆
#200
中等
岛屿数量
DFS/BFS 遍历连通块,遇到 1 时计数并将相连的 1 标记为已访问。
DFS
BFS
矩阵
☆
#994
中等
腐烂的橘子
多源 BFS:所有腐烂橘子同时入队,逐层扩展记录扩散层数。
BFS
矩阵
☆
#207
中等
课程表
Kahn 算法拓扑排序:不断移除入度为 0 的节点,检查是否能完成所有课程。
图
拓扑排序
BFS
☆
#208
中等
实现 Trie(前缀树)
每个节点含 children 字典和 is_end 标记,insert/search/prefixSearch 均 O(L)。
树
设计
字典树
☆
#062
中等
不同路径
dp[i][j] = dp[i-1][j] + dp[i][j-1],空间优化为一维数组。
动态规划
组合数学
☆
#005
中等
最长回文子串
中心扩展法:以每个字符和每对相邻字符为中心向两边扩展。
动态规划
字符串
☆
#1143
中等
最长公共子序列
dp[i][j]:字符匹配则 dp[i-1][j-1]+1,否则 max(dp[i-1][j], dp[i][j-1])。
动态规划
字符串
☆
#072
中等
编辑距离
dp[i][j] = min(删除/插入/替换),三种操作对应三个子问题。
动态规划
字符串
☆
#098
中等
验证二叉搜索树
中序遍历检查严格递增,或递归传递上下界验证每个节点。
树
DFS
BST
☆
#230
中等
二叉搜索树中第 K 小的元素
中序遍历 BST 得到有序序列,第 k 个即为答案,可提前终止。
树
DFS
BST
☆
#199
中等
二叉树的右视图
BFS 每层最后一个元素,或 DFS 优先右子树每层首个节点。
树
BFS
DFS
☆
#114
中等
二叉树展开为链表
Morris 遍历思想:将右子树接到左子树最右节点后面,空间 O(1)。
树
DFS
☆
#105
中等
从前序与中序遍历序列构造二叉树
前序首元素为根,中序找根位置划分左右子树,哈希表加速查找。
树
DFS
数组
☆
#437
中等
路径总和 III
前缀和 + DFS:curr_sum - target 在哈希表中存在则存在合法路径。
树
DFS
前缀和
☆
#236
中等
二叉树的最近公共祖先
后序遍历:两边都找到则当前为 LCA,只一边找到则 LCA 在那一侧。
树
DFS
☆
#152
中等
乘积最大子数组
同时维护最大乘积和最小乘积,遇负数时交换两者,应对负数翻转效应。
动态规划
数组
☆
#416
中等
分割等和子集
0-1 背包:能否选出和为 sum/2 的子集,从后往前遍历避免重复使用。
动态规划
0-1 背包
☆
#139
中等
单词拆分
dp[i] = OR(dp[j] && s[j:i] in dict),完全背包的字符串变体。
动态规划
字符串
☆
#032
困难
最长有效括号
栈存储下标,-1 作哨兵,弹出后当前下标减栈顶即为有效长度。
栈
动态规划
☆
#073
中等
矩阵置零
原地标记:复用首行首列作为标记数组,需单独处理首行首列的零。
矩阵
数组
☆
#054
中等
螺旋矩阵
四边界收缩法:右→下→左→上逐层遍历,注意边界合法性检查。
矩阵
数组
☆
#048
中等
旋转图像
顺时针 90° = 转置 + 水平翻转,原地操作 O(1) 空间。
矩阵
数组
☆
#240
中等
搜索二维矩阵 II
从右上角开始搜索,利用行列有序性每步排除一行或一列。
矩阵
二分查找
学习路径
按难度渐进排列,建议按顺序学习,前置知识为后续基础
初级篇
入门必刷
01
位运算技巧
02
哈希表基础
03
双指针入门
04
栈基础
05
链表入门
06
二叉树入门
中级篇
进阶提升
07
滑动窗口
08
数组进阶技巧
09
二分查找
10
字符串技巧
11
贪心算法
12
回溯算法
13
堆
14
一维动态规划
15
链表进阶
高级篇
冲刺大厂
16
图论
17
多维动态规划
18
二叉树进阶
19
动态规划高级
20
矩阵操作
初级篇 — 入门必刷
01
3 题
位运算技巧
位运算直接对整数的二进制位进行操作,覆盖异或消同、摩尔投票、Brian Kernighan 逐位消除三个核心技巧。
#136
#169
#461
02
3 题
哈希表基础
哈希表通过哈希函数将键映射到存储位置,查找、插入、删除均为 O(1),覆盖查找补数、特征分组、连续性判断三大场景。
#1
#49
#128
03
3 题
双指针入门
双指针通过两个指针协同遍历,将 O(n²) 降为 O(n),覆盖快慢指针、对向指针、排序后双指针三种模式。
#283
#11
#15
04
2 题
栈基础
栈是后进先出数据结构,主要用于处理需要回溯的场景,覆盖括号匹配和辅助栈设计两个经典问题。
#20
#155
05
4 题
链表入门
链表是面试高频数据结构,覆盖相交检测、反转、合并、环检测四个基础操作,掌握指针操控的核心技巧。
#160
#206
#21
#141
06
4 题
二叉树入门
二叉树是递归思想的最佳训练场,覆盖翻转、深度计算、中序遍历、层序遍历四个入门问题。
#226
#104
#94
#102
中级篇 — 进阶提升
07
3 题
滑动窗口
用左右两个指针维护窗口,右指针扩张、左指针收缩,在 O(n) 时间内解决子串/子数组问题。
#3
#438
#76
08
4 题
数组进阶技巧
前缀和、分治、原地操作——数组问题的三大杀手锏,掌握 Kadane、排序合并、前缀积、三次翻转等核心技巧。
#53
#56
#238
#189
09
4 题
二分查找
二分查找不只是有序数组查找,更是一种将搜索空间减半的思维模式,覆盖标准二分、边界查找、旋转数组、矩阵搜索。
#35
#34
#33
#74
10
2 题
字符串技巧
前缀和与递归解码——字符串问题往往是数组问题的伪装,加上编码技巧。
#560
#394
11
4 题
贪心算法
贪心每步选择局部最优,覆盖股票买卖、跳跃游戏、区间划分等经典场景,核心是证明局部最优能推导全局最优。
#121
#55
#45
#763
12
5 题
回溯算法
穷举所有可能,通过选择→递归→撤销三步走,在解空间树上搜索,配合剪枝可大幅优化。
#46
#78
#39
#22
#79
13
2 题
堆
堆是特殊的完全二叉树,Python heapq 提供高效最小堆操作,核心应用是 Top-K 问题和动态极值。
#215
#347
14
5 题
一维动态规划
将大问题分解为重叠子问题,用数组记录子问题的解,覆盖线性DP、完全背包、LIS等核心模式。
#70
#198
#279
#322
#300
15
6 题
链表进阶
链表的进阶操作,覆盖入环点检测、归并排序、K路合并、LRU缓存、大数加法等综合应用。
#142
#148
#23
#146
#2
高级篇 — 冲刺大厂
16
4 题
图论
将实际问题抽象为图模型,掌握 DFS、BFS、拓扑排序、字典树等基本算法。
#200
#994
#207
#208
17
4 题
多维动态规划
从一维扩展到二维,状态转移变为 dp[i][j],覆盖路径计数、回文子串、LCS、编辑距离四大经典。
#62
#5
#1143
#72
18
7 题
二叉树进阶
二叉树的高阶操作,覆盖 BST 验证、中序第K小、右视图、Morris遍历、构造、前缀和路径、LCA 七大问题。
#98
#230
#199
#114
#105
#437
#236
19
4 题
动态规划高级
DP 的进阶技巧,覆盖乘积最大子数组、0-1背包、字符串DP、栈+DP混合等综合应用。
#152
#416
#139
#32
20
4 题
矩阵操作
二维空间上的算法应用,包括旋转、搜索、螺旋遍历等,考察对二维数组的精细操作能力。
#73
#54
#48
#240