综合专题
共 47 条分类条目,10 个题型小节; 每行标注难度、题号、原笔记摘要和 LeetCode 链接。
1. 字符串(String)
6 条类型特点:字符串是字符的序列,常与双指针、滑动窗口、动态规划、KMP 等算法结合。题目通常涉及子串、回文、模式匹配等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | 344. 反转字符串#344 LeetCode ↗ | 双指针原地反转 |
| 简单 | 125. 验证回文串#125 LeetCode ↗ | 双指针判断回文,忽略非字母数字 |
| 中等 | LeetCode ↗ | 中心扩展法或动态规划 |
| 中等 | LeetCode ↗ | 滑动窗口 + 哈希表 |
| 困难 | 10. 正则表达式匹配#10 LeetCode ↗ | 动态规划,处理 '.' 和 '*' |
| 困难 | 72. 编辑距离#72 LeetCode ↗ | 二维 DP,增删改操作 |
- 简单#344
双指针原地反转
- 简单#125
双指针判断回文,忽略非字母数字
- 中等#5
中心扩展法或动态规划
- 中等#3站内精讲
滑动窗口 + 哈希表
- 困难#10
动态规划,处理 '.' 和 '*'
- 困难#72
二维 DP,增删改操作
2. 回溯(Backtracking)
6 条类型特点:回溯是深度优先搜索的一种形式,常用于解决排列、组合、子集、棋盘问题。核心是“做选择-递归-撤销选择”。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 46. 全排列#46 LeetCode ↗ | 回溯 + 标记已使用元素 |
| 中等 | 78. 子集#78 LeetCode ↗ | 回溯,每个元素可选或不选 |
| 中等 | 39. 组合总和#39 LeetCode ↗ | 回溯 + 剪枝,允许重复选取 |
| 中等 | 79. 单词搜索#79 LeetCode ↗ | 回溯在二维网格中搜索单词 |
| 困难 | 51. N 皇后#51 LeetCode ↗ | 回溯,列、对角线冲突判断 |
| 困难 | 37. 解数独#37 LeetCode ↗ | 回溯 + 状态压缩优化 |
- 中等#46
回溯 + 标记已使用元素
- 中等#78
回溯,每个元素可选或不选
- 中等#39
回溯 + 剪枝,允许重复选取
- 中等#79
回溯在二维网格中搜索单词
- 困难#51
回溯,列、对角线冲突判断
- 困难#37
回溯 + 状态压缩优化
3. 动态规划专题(DP)
6 条类型特点:动态规划适用于具有重叠子问题和最优子结构的问题。除了基础的线性 DP,还有区间 DP、树形 DP、状态压缩 DP、数位 DP 等。虽然数组中已涉及部分,但这里单独列出更全面的 DP 题目。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | LeetCode ↗ | 斐波那契式 DP |
| 中等 | 198. 打家劫舍#198 LeetCode ↗ | 线性 DP,相邻不能偷 |
| 中等 | 300. 最长递增子序列#300 LeetCode ↗ | 二分优化或 O(n²) DP |
| 中等 | 1143. 最长公共子序列#1143 LeetCode ↗ | 二维 DP,字符匹配 |
| 困难 | 887. 鸡蛋掉落#887 LeetCode ↗ | 经典 DP 优化 |
| 困难 | 312. 戳气球#312 LeetCode ↗ | 区间 DP,反向思考 |
- 简单#70站内精讲
斐波那契式 DP
- 中等#198
线性 DP,相邻不能偷
- 中等#300
二分优化或 O(n²) DP
- 中等#1143
二维 DP,字符匹配
- 困难#887
经典 DP 优化
- 困难#312
区间 DP,反向思考
4. 位运算(Bit Manipulation)
5 条类型特点:利用整数的二进制表示进行高效操作,常用于状态压缩、异或性质、位掩码等。位运算通常能将时间复杂度降为 O(n) 或更低。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | LeetCode ↗ | 异或运算,相同数抵消 |
| 简单 | 191. 位1的个数#191 LeetCode ↗ | n & (n-1) 消除最低位的 1 |
| 中等 | 78. 子集#78 LeetCode ↗ | 位掩码枚举所有子集 |
| 中等 | 201. 数字范围按位与#201 LeetCode ↗ | 寻找公共前缀 |
| 困难 | LeetCode ↗ | 分组异或 |
- 简单#136站内精讲
异或运算,相同数抵消
- 简单#191
n & (n-1) 消除最低位的 1
- 中等#78
位掩码枚举所有子集
- 中等#201
寻找公共前缀
- 困难#260
分组异或
5. 数学(Math)
5 条类型特点:涉及数学定理、公式推导、几何计算等。常见有素数判断、最大公约数、快速幂、几何计算等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | 9. 回文数#9 LeetCode ↗ | 反转一半数字比较 |
| 简单 | 204. 计数质数#204 LeetCode ↗ | 埃氏筛法 |
| 中等 | LeetCode ↗ | 快速幂(二分递归) |
| 中等 | 166. 分数到小数#166 LeetCode ↗ | 模拟除法,处理循环节 |
| 困难 | 149. 直线上最多的点数#149 LeetCode ↗ | 斜率哈希,注意精度 |
- 简单#9
反转一半数字比较
- 简单#204
埃氏筛法
- 中等#50
快速幂(二分递归)
- 中等#166
模拟除法,处理循环节
- 困难#149
斜率哈希,注意精度
6. 排序(Sorting)
4 条类型特点:掌握各种排序算法的实现(快速、归并、堆排)以及基于排序的变形问题(如桶排序、基数排序)。排序本身常作为其他算法的基础。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 148. 排序链表#148 LeetCode ↗ | 归并排序在链表上的实现 |
| 中等 | 179. 最大数#179 LeetCode ↗ | 自定义排序规则 |
| 中等 | 912. 排序数组#912 LeetCode ↗ | 手撕快速排序或归并排序 |
| 困难 | 164. 最大间距#164 LeetCode ↗ | 桶排序思想 |
- 中等#148
归并排序在链表上的实现
- 中等#179
自定义排序规则
- 中等#912
手撕快速排序或归并排序
- 困难#164
桶排序思想
7. 分治(Divide and Conquer)
4 条类型特点:将问题分解为若干个规模较小但类似的子问题,递归解决后合并结果。典型应用有归并排序、快速排序、最近点对等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | LeetCode ↗ | 分治(也可 DP) |
| 中等 | 169. 多数元素#169 LeetCode ↗ | 分治或摩尔投票 |
| 困难 | 23. 合并K个升序链表#23 LeetCode ↗ | 分治法合并(也可用堆) |
| 困难 | 241. 为运算表达式设计优先级#241 LeetCode ↗ | 分治加括号 |
- 中等#53站内精讲
分治(也可 DP)
- 中等#169
分治或摩尔投票
- 困难#23
分治法合并(也可用堆)
- 困难#241
分治加括号
8. 设计(Design)
4 条类型特点:要求实现特定功能的数据结构或系统,通常需要综合运用多种基础数据结构。常见题如 LRU、LFU、线程安全等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 146. LRU 缓存#146 LeetCode ↗ | 哈希表 + 双向链表 |
| 中等 | LeetCode ↗ | 哈希表 + 动态数组 |
| 困难 | 460. LFU 缓存#460 LeetCode ↗ | 哈希表 + 双向链表 + 频率索引 |
| 中等 | 155. 最小栈#155 LeetCode ↗ | 辅助栈 |
- 中等#146
哈希表 + 双向链表
- 中等#380
哈希表 + 动态数组
- 困难#460
哈希表 + 双向链表 + 频率索引
- 中等#155
辅助栈
9. 多线程(Concurrency)
3 条类型特点:涉及并发控制、锁、信号量等,题目较少,但有时出现在面试中。力扣上有专门的“多线程”标签。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 1114. 按序打印#1114 LeetCode ↗ | 控制线程执行顺序 |
| 中等 | 1115. 交替打印 FooBar#1115 LeetCode ↗ | 信号量或锁 |
| 中等 | 1116. 打印零与奇偶数#1116 LeetCode ↗ | 三个线程交替打印 |
- 中等#1114
控制线程执行顺序
- 中等#1115
信号量或锁
- 中等#1116
三个线程交替打印
10. 高级数据结构(Segment Tree / Fenwick Tree / Balanced Tree)
4 条类型特点:用于处理区间查询、区间更新等问题。线段树和树状数组常用于解决逆序对、区间和、区间最值等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 困难 | LeetCode ↗ | 树状数组或线段树 |
| 困难 | LeetCode ↗ | 树状数组(离散化) |
| 困难 | 218. 天际线问题#218 LeetCode ↗ | 扫描线 + 线段树(或优先队列) |
| 困难 | 493. 翻转对#493 LeetCode ↗ | 归并排序或树状数组 |
- 困难#307
树状数组或线段树
- 困难#315
树状数组(离散化)
- 困难#218
扫描线 + 线段树(或优先队列)
- 困难#493
归并排序或树状数组