3410 字
约 11 分钟
3
S03-X01 · 题解索引(LeetCode 1–100 + 笔记卡)

定位:附录型索引,可跳读。每题一行:题号 · 模式 · 时间/空间 · 一句话洞察 · 精讲位置。
前置:S03-B01–B09。
覆盖旧文:104 张题解卡(12,119 个原文点位),含 25 张空壳卡(补写在 J 系列)。
上一篇:S03-B09 · 数学算法集:从阶乘到 FFT
下一篇:S03-J01 · 双指针与滑动窗口。

用法:做不出题时先查这里拿到"模式",再去对应 J 文章看完整推导与代码。只背答案不学模式,换马甲就废。


1. 双指针与滑动窗口(精讲 J01)

题 名称 时间 / 空间 一句话洞察
3 无重复最长子串 O(n) / O(Σ) 右指针扩张,左指针收缩到窗口内无重复
5 最长回文子串 O(n²) / O(1) 每个中心(奇/偶)向两侧扩;要 O(n) 用 Manacher
11 盛最多水的容器 O(n) / O(1) 面积由短板决定,移动长板只会更小 → 只移短板
15 三数之和 O(n²) / O(1) 排序后固定一个数,剩余两数对撞;跳过重复值
16 最接近的三数之和 O(n²) / O(1) 与 15 同构,维护 `
18 四数之和 O(n³) / O(1) 两层固定 + 对撞;去重逻辑与 15 相同
26 删除有序数组重复项 O(n) / O(1) 读写双指针,写指针只在"新值"时前进
27 移除元素 O(n) / O(1) 同上;返回值是新长度,尾部内容无意义
28 实现 strStr O(n+m) / O(m) KMP 前缀函数,避免回退;暴力是 O(nm)
30 串联所有单词子串 O(n·L) / O(L) 按单词长度分组,每组内滑动窗口
75 颜色分类 O(n) / O(1) 荷兰国旗三路划分:一次遍历分三段
76 最小覆盖子串 O(n) / O(Σ) 窗口内维护"还差几个字符",欠账=0 时收缩

2. 二分(精讲 J02)

题 名称 时间 / 空间 一句话洞察
4 两个正序数组中位数 O(log(m+n)) / O(1) 在短数组上二分划分点,保证左右两半元素数相等
29 两数相除 O(log n) / O(1) 用"减法翻倍"代替试商;注意 −2³¹ 溢出
33 搜索旋转排序数组 O(log n) / O(1) 先判 mid 落在哪半有序,再决定收缩方向
34 找首末位置 O(log n) / O(1) 两次二分:lower_bound 与 upper_bound
35 搜索插入位置 O(log n) / O(1) 就是求 lower_bound;找不到时返回插入点
50 Pow(x,n) O(log n) / O(1) 快速幂;负指数取倒数
69 x 的平方根 O(log x) / O(1) 二分答案:最大 x 使 x² ≤ n
74 搜索二维矩阵 O(log(mn)) / O(1) 行列均有序 → 可视为一维有序数组
81 旋转排序数组 II O(log n) 平均 / O(1) 有重复值时无法判有序 → 收缩边界退化为 O(n)

3. 链表(精讲 J03)

题 名称 时间 / 空间 一句话洞察
2 两数相加 O(max(m,n)) / O(1) 同时走两链 + 进位;注意长度不等与最后进位
19 删除倒数第 N O(n) / O(1) 快指针先走 N 步,再同步走;用虚拟头免特判
21 合并两个有序链表 O(m+n) / O(1) 归并;哨兵节点简化头节点处理
23 合并 K 个有序链表 O(N log k) / O(k) 小顶堆存每个链头;或两两分治
24 两两交换节点 O(n) / O(1) 三指针:prev / a / b,每轮换完推进两步
25 K 个一组翻转 O(n) / O(1) 先数够 K 个再翻;不足 K 个保持原样
61 旋转链表 O(n) / O(1) 连成环,长度 L 后断在 L - k%L 处
82 删除重复元素 II O(n) / O(1) 虚拟头 + 跳过整段同值;保留只出现一次的
83 删除重复元素 O(n) / O(1) 相邻比较,重复就跳过(保留一个)
86 分隔链表 O(n) / O(1) 两条子链(<x / ≥x)拼接,避免原地插入
92 反转链表 II O(n) / O(1) 虚拟头 + 四指针:前驱、区间首、区间尾、后继

4. 回溯与搜索(精讲 J04)

题 名称 时间 / 空间 一句话洞察
17 电话号码字母组合 O(4ⁿ) / O(n) 每个数字的候选集做笛卡尔积
22 括号生成 O(4ⁿ/√n) / O(n) 只要"左括号已用 < n 且 左 ≥ 右"就合法
37 解数独 O(9^81) 最坏 / O(1) 行/列/宫三个位掩码,选候选最少的格子先填
39 组合总和(可重复) O(2ⁿ) / O(n) 传 start 保证不回头选,允许重复取自身
40 组合总和 II O(2ⁿ) / O(n) 先排序,同层跳过相同值避免重复组合
46 全排列 O(n!) / O(n) 交换法或 used 数组;撤销现场是关键
47 全排列 II O(n!·n) / O(n) 排序 + "同层相同值只用第一个"
51 N 皇后 O(n!) / O(n) 三个方向集合(列/主对角/副对角)用位掩码判断
52 N 皇后 II O(n!) / O(1) 同 51,只计数不记录棋盘
77 组合 O(C(n,k)) / O(k) 选够 k 个即收集;剪枝:剩余不够就返回
78 子集 O(2ⁿ) / O(n) 每个元素"选/不选"两分支
79 单词搜索 O(m·n·4^L) / O(L) 网格 DFS + 回溯标记;起点逐个尝试
90 子集 II O(2ⁿ) / O(n) 排序 + 同层去重
93 复原 IP 地址 O(3⁴) / O(1) 每段 1–3 位、≤255、无前导 0;4 段用完且到末尾才算解

5. 动态规划(精讲 J05)

题 名称 时间 / 空间 一句话洞察
10 正则匹配 O(mn) / O(mn) * 分"匹配 0 次"与"匹配多次"两支
44 通配符匹配 O(mn) / O(mn) * 可匹配任意串;? 匹配单字符
53 最大子数组和 O(n) / O(1) Kadane:cur = max(x, cur+x),负数即重开
62 不同路径 O(mn) / O(n) dp[j] += dp[j-1] 一维滚动
63 不同路径 II O(mn) / O(n) 障碍处 dp=0;初始化也要跳过障碍
64 最小路径和 O(mn) / O(n) 只能从上方或左侧来,取 min
70 爬楼梯 O(n) / O(1) 斐波那契;滚动两个变量即可
72 编辑距离 O(mn) / O(mn) 三种操作取 min;初始化为 i / j
87 扰乱字符串 O(n³) / O(n²) 区间 DP + 记忆化;枚举分割点两两组合
91 解码方法 O(n) / O(1) 当前位可单独解(1–9)或与前者组合(10–26)
97 交错字符串 O(mn) / O(n) dp[i][j] 表示 s1 前 i + s2 前 j 能否拼出 s3 前 i+j

6. 栈与单调栈(精讲 J06)

题 名称 时间 / 空间 一句话洞察
20 有效括号 O(n) / O(n) 栈顶匹配;结束栈必须为空
32 最长有效括号 O(n) / O(n) 栈存下标(含一个哨兵 −1),弹出后算长度
42 接雨水 O(n) / O(n) 单调递减栈;或双指针维护左右最大高度
71 简化路径 O(n) / O(n) 按 / 切分,.. 弹栈,. 与空段忽略
84 柱状图最大矩形 O(n) / O(n) 单调递增栈;哨兵 0 保证全部弹出
85 最大矩形 O(mn) / O(n) 逐行累加柱高,每行跑一次 84

7. 其余题(无独立精讲,索引在此)

题 名称 模式 时间 / 空间
1 两数之和 哈希 O(n) / O(n)
6 Z 字形变换 模拟 O(n) / O(n)
7 整数反转 逐位 + 溢出检查 O(log n) / O(1)
8 字符串转整数 状态机 O(n) / O(1)
9 回文数 反转一半比较 O(log n) / O(1)
12 整数转罗马 查表贪心 O(1) / O(1)
13 罗马转整数 相邻比较 O(n) / O(1)
14 最长公共前缀 纵向扫描 O(S) / O(1)
31 下一个排列 从右找升序 + 反转 O(n) / O(1)
36 有效数独 位掩码/哈希 O(1) / O(1)
38 外观数列 模拟报数 O(L) / O(L)
41 缺失的第一个正数 原地哈希(值→下标) O(n) / O(1)
43 字符串相乘 竖式模拟 O(mn) / O(m+n)
45 跳跃游戏 II 贪心(层边界) O(n) / O(1)
48 旋转图像 转置 + 翻转 O(n²) / O(1)
49 字母异位词分组 排序/计数作 key O(n·k log k) / O(nk)
54 螺旋矩阵 四边界模拟 O(mn) / O(1)
55 跳跃游戏 维护最远可达 O(n) / O(1)
56 合并区间 排序后合并 O(n log n) / O(n)
57 插入区间 三段式 O(n) / O(n)
58 最后一个单词长度 反向扫描 O(n) / O(1)
59 螺旋矩阵 II 模拟填充 O(n²) / O(n²)
60 排列序列 康托/递归选数 O(n²) / O(n)
65 有效数字 状态机(DFA) O(n) / O(1)
66 加一 进位模拟 O(n) / O(1)
67 二进制求和 逐位进位 O(n) / O(n)
68 文本左右对齐 贪心分行 + 空格分配 O(n) / O(n)
73 矩阵置零 用首行首列做标记 O(mn) / O(1)
80 删除重复项 II 三指针(保留两次) O(n) / O(1)
88 合并两个有序数组 从后往前(避免覆盖) O(m+n) / O(1)
89 格雷编码 i ^ (i>>1) O(2ⁿ) / O(1)
94 二叉树中序遍历 栈/递归 O(n) / O(h)
95 不同的 BST II 递归分治构造 O(Cₙ) / O(n)
96 不同的 BST 卡特兰数 O(n²) / O(n)
98 验证 BST 中序递增 / 上下界 O(n) / O(h)
99 恢复 BST 中序找逆序对 O(n) / O(h)
100 相同的树 递归比较 O(n) / O(h)

8. 按模式回查(做不出题时先看这里)

题目特征 模式 精讲
有序数组 + 找目标/边界 二分 J02
连续子数组 + 窗口内条件 滑动窗口 J01
两数/三数/面积 + 排序 对撞双指针 J01
链表 + 倒数/中间/环形 快慢指针 J03
枚举所有"组合/排列/方案" 回溯 J04
求"最少/最大/方案数" + 有重叠子问题 DP J05
"下一个更大/更小元素" 单调栈 J06
括号/表达式/路径解析 栈 J06
去重/计数/两数配对 哈希 B04
前 K 个/第 K 大 堆 B05
前缀匹配/自动补全 Trie B06
动态连通性 并查集 B07

9. 空壳卡与重复卡的处理(本索引的登记说明)

情况 卡 处理
只有题干无答案(25 张) #11/20/24/27/32/38/42/43/51/53/56/58/61/62/71/79/82/91/97/100 等 在 J 系列补写,标 E-S03-111~E-S03-126;本索引只给模式与复杂度
同题重复(4 组) #4/#5/#6/#7 各有一张薄卡 薄卡标 duplicate_ref,内容并入富卡
笔记类卡(无题号) A-2483/A-2574 等 进 gaps.md 的"卡外内容"清单

10. 下一篇

S03-J01 · 双指针与滑动窗口

从索引进入精讲。第一篇讲"用两个指针代替双层循环"的成立条件:为什么右指针只进不退、左指针什么时候收缩,并用暴力 O(n²) 与滑窗 O(n) 的实测耗时说明差距。


本篇属于系列《S03 · 数据结构与算法》,是基础层附录。旧文来源:104 张题解卡(12,119 点位);每条一行均可回到 coverage.csv 的 source_id 核对。

S03-X01 · 题解索引(LeetCode 1–100 + 笔记卡)
https://www.clxhxhhr.top/posts/5215/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。