Skip to content

补充算法类型分类

1. 字符串(String)

类型特点:字符串是字符的序列,常与双指针、滑动窗口、动态规划、KMP 等算法结合。题目通常涉及子串、回文、模式匹配等。

难度题目核心思路简介
简单344. 反转字符串双指针原地反转
简单125. 验证回文串双指针判断回文,忽略非字母数字
中等5. 最长回文子串中心扩展法或动态规划
中等3. 无重复字符的最长子串滑动窗口 + 哈希表
困难10. 正则表达式匹配动态规划,处理 '.' 和 '*'
困难72. 编辑距离二维 DP,增删改操作

2. 回溯(Backtracking)

类型特点:回溯是深度优先搜索的一种形式,常用于解决排列、组合、子集、棋盘问题。核心是“做选择-递归-撤销选择”。

难度题目核心思路简介
中等46. 全排列回溯 + 标记已使用元素
中等78. 子集回溯,每个元素可选或不选
中等39. 组合总和回溯 + 剪枝,允许重复选取
中等79. 单词搜索回溯在二维网格中搜索单词
困难51. N 皇后回溯,列、对角线冲突判断
困难37. 解数独回溯 + 状态压缩优化

3. 动态规划专题(DP)

类型特点:动态规划适用于具有重叠子问题和最优子结构的问题。除了基础的线性 DP,还有区间 DP、树形 DP、状态压缩 DP、数位 DP 等。虽然数组中已涉及部分,但这里单独列出更全面的 DP 题目。

难度题目核心思路简介
简单70. 爬楼梯斐波那契式 DP
中等198. 打家劫舍线性 DP,相邻不能偷
中等300. 最长递增子序列二分优化或 O(n²) DP
中等1143. 最长公共子序列二维 DP,字符匹配
困难887. 鸡蛋掉落经典 DP 优化
困难312. 戳气球区间 DP,反向思考

4. 位运算(Bit Manipulation)

类型特点:利用整数的二进制表示进行高效操作,常用于状态压缩、异或性质、位掩码等。位运算通常能将时间复杂度降为 O(n) 或更低。

难度题目核心思路简介
简单136. 只出现一次的数字异或运算,相同数抵消
简单191. 位1的个数n & (n-1) 消除最低位的 1
中等78. 子集位掩码枚举所有子集
中等201. 数字范围按位与寻找公共前缀
困难260. 只出现一次的数字 III分组异或

5. 数学(Math)

类型特点:涉及数学定理、公式推导、几何计算等。常见有素数判断、最大公约数、快速幂、几何计算等。

难度题目核心思路简介
简单9. 回文数反转一半数字比较
简单204. 计数质数埃氏筛法
中等50. Pow(x, n)快速幂(二分递归)
中等166. 分数到小数模拟除法,处理循环节
困难149. 直线上最多的点数斜率哈希,注意精度

6. 排序(Sorting)

类型特点:掌握各种排序算法的实现(快速、归并、堆排)以及基于排序的变形问题(如桶排序、基数排序)。排序本身常作为其他算法的基础。

难度题目核心思路简介
中等148. 排序链表归并排序在链表上的实现
中等179. 最大数自定义排序规则
中等912. 排序数组手撕快速排序或归并排序
困难164. 最大间距桶排序思想

7. 分治(Divide and Conquer)

类型特点:将问题分解为若干个规模较小但类似的子问题,递归解决后合并结果。典型应用有归并排序、快速排序、最近点对等。

难度题目核心思路简介
中等53. 最大子数组和分治(也可 DP)
中等169. 多数元素分治或摩尔投票
困难23. 合并K个升序链表分治法合并(也可用堆)
困难241. 为运算表达式设计优先级分治加括号

8. 设计(Design)

类型特点:要求实现特定功能的数据结构或系统,通常需要综合运用多种基础数据结构。常见题如 LRU、LFU、线程安全等。

难度题目核心思路简介
中等146. LRU 缓存哈希表 + 双向链表
中等380. O(1) 时间插入、删除和获取随机元素哈希表 + 动态数组
困难460. LFU 缓存哈希表 + 双向链表 + 频率索引
中等155. 最小栈辅助栈

9. 多线程(Concurrency)

类型特点:涉及并发控制、锁、信号量等,题目较少,但有时出现在面试中。力扣上有专门的“多线程”标签。

难度题目核心思路简介
中等1114. 按序打印控制线程执行顺序
中等1115. 交替打印 FooBar信号量或锁
中等1116. 打印零与奇偶数三个线程交替打印

10. 高级数据结构(Segment Tree / Fenwick Tree / Balanced Tree)

类型特点:用于处理区间查询、区间更新等问题。线段树和树状数组常用于解决逆序对、区间和、区间最值等。

难度题目核心思路简介
困难307. 区域和检索 - 数组可修改树状数组或线段树
困难315. 计算右侧小于当前元素的个数树状数组(离散化)
困难218. 天际线问题扫描线 + 线段树(或优先队列)
困难493. 翻转对归并排序或树状数组

总结

以上十类算法是面试和竞赛中除之前已列类型外的高频考点。建议按以下顺序拓展练习:

  1. 字符串 + 回溯(打好基础)
  2. 动态规划专题(分类型练习)
  3. 位运算 + 数学(锻炼思维)
  4. 排序 + 分治(理解递归思想)
  5. 设计 + 高级数据结构(提升综合能力)
  6. 多线程(若时间允许)