文章

算法题型汇总学习教程(必会 + 进阶)

按频率和难度拆解 31 个算法题型,给出学习顺序、刷题方法和每类示例题思路。

算法题型汇总学习教程(必会 + 进阶)

这篇给你一份可以直接执行的「题型学习路线图」:先搞定必会,再冲击进阶。每个题型都给你:

  • 学什么(核心知识点)
  • 怎么练(推荐训练方式)
  • 示例题(含思路)

适合人群:准备算法面试、刷 LeetCode/牛客、想系统补齐数据结构与算法基础。


一、如何使用这份题型表

你给出的顺序已经非常合理:序号越小,出现频率越高。

建议节奏:

  1. 先必会后进阶:先拿到稳定分,再追求上限。
  2. 每个题型 3 步:模板题 3 道 → 变形题 3 道 → 综合题 2 道。
  3. 做题复盘三件事
    • 这题属于哪个题型?
    • 为什么我的第一反应会错?
    • 下次用什么“触发词”快速定位解法?

二、必会题型(15 类)

1) 数组(最高频)

核心:下标访问、原地修改、前后缀思想。
训练:多写边界(空数组、单元素、重复值)。

示例题:两数之和

  • 输入:[2,7,11,15], target=9
  • 思路:遍历数组,用哈希记录已见元素,查 target-x

2) 字符串

核心:子串、回文、匹配、字符计数。
训练:统一写法(双指针/滑窗/哈希计数)。

示例题:最长无重复子串

  • 思路:滑动窗口 + last_index,遇重复就移动左边界。

3) 排序

核心:比较排序复杂度;何时用快排/归并/堆排;稳定性。
训练:会用 sort,也要理解“排序后处理”套路。

示例题:合并区间

  • 思路:按左端点排序后线性合并。

4) 贪心

核心:局部最优推全局最优;交换论证。
训练:先猜策略,再尝试反例验证。

示例题:分发饼干

  • 思路:胃口和饼干都排序,小饼干优先喂最小胃口。

5) 递归

核心:递归定义、终止条件、状态回收。
训练:画递归树,先写“函数语义”。

示例题:二叉树最大深度

  • 思路:depth = 1 + max(left, right)

6) 循环

核心:多层循环优化、循环不变量。
训练:从 O(n²) 思考如何降到 O(nlogn)/O(n)。

示例题:寻找重复数(朴素版)

  • 思路:双循环可做基线,再优化为哈希或快慢指针。

7) 滑窗

核心:区间 [l,r] 动态扩缩;满足条件后收缩左边。
训练:固定窗口与可变窗口都要练。

示例题:最小覆盖子串

  • 思路:计数表 + formed/required 管理有效性。

8) 栈

核心:后进先出、单调栈、括号匹配。
训练:看到“最近更大/更小”优先想单调栈。

示例题:每日温度

  • 思路:维护递减栈,弹栈时计算距离。

9) 进制转换

核心n % base 取位、n /= base 迭代;字符映射。
训练:十进制↔二/八/十六进制互转。

示例题:十进制转 16 进制字符串

  • 思路:反复取余并逆序。

10) 位运算

核心:与或异或、位移、lowbit。
训练:牢记 x & (x-1) 去最低位 1。

示例题:只出现一次的数字

  • 思路:所有数异或,成对抵消。

11) 队列

核心:FIFO、双端队列、单调队列。
训练:窗口最大值、层序遍历是重点。

示例题:滑动窗口最大值

  • 思路:单调队列维护窗口内候选最大值。

12) 哈希表

核心:计数、去重、映射。
训练:能用哈希就别先上暴力。

示例题:字母异位词分组

  • 思路:排序后的字符串作为 key 分组。

13) 链表

核心:虚拟头结点、快慢指针、反转。
训练:手写反转链表、合并链表、环检测。

示例题:反转链表

  • 思路:prev/curr/next 三指针迭代。

14) 线性表

核心:顺序存储与链式存储对比;增删改查复杂度。
训练:抽象“表操作”,注意下标合法性。

示例题:实现简化版顺序表

  • 思路:动态扩容 + 插入搬移元素。

15) 二分查找

核心:有序性 + 单调性;边界模板(左闭右闭/左闭右开)。
训练:专练“找第一个/最后一个满足条件的位置”。

示例题:搜索旋转排序数组

  • 思路:判断哪一半有序,再决定丢弃区间。

三、进阶题型(16 类)

1) 图

核心:邻接表、最短路、拓扑排序、最小生成树。
示例题:课程表(拓扑排序判断是否有环)。

2) 树

核心:递归遍历、层序遍历、树形 DP。
示例题:二叉树最近公共祖先(LCA)。

3) DFS 搜索

核心:深度优先 + 回退。
示例题:岛屿数量(DFS 染色)。

4) BFS 搜索

核心:按层扩展,天然最短步数(无权图)。
示例题:单词接龙。

5) 动态规划

核心:状态定义、转移方程、初始化、遍历顺序。
示例题:0/1 背包、最长上升子序列。

6) 前缀和

核心:区间和 O(1) 查询;二维前缀和。
示例题:和为 K 的子数组(前缀和 + 哈希)。

7) 排列组合

核心:组合计数、杨辉三角、快速组合数。
示例题:组合总和(与回溯常联动)。

8) 矩阵

核心:坐标映射、方向数组、原地旋转。
示例题:螺旋矩阵。

9) 双指针

核心:同向/反向、快慢指针。
示例题:盛最多水的容器。

10) 回溯

核心:路径、选择列表、剪枝。
示例题:全排列、N 皇后。

11) 状态机

核心:状态转移(持有/未持有、冷冻期等)。
示例题:买卖股票系列。

12) 并查集

核心:路径压缩 + 按秩合并。
示例题:冗余连接、朋友圈数量。

13) 正则表达式

核心:模式匹配、贪婪与非贪婪、边界控制。
示例题:实现简单正则匹配(.*)。

14) 分治

核心:分解-解决-合并。
示例题:归并排序、快速幂。

15) 枚举

核心:有限搜索空间的系统遍历 + 剪枝优化。
示例题:三数之和(排序 + 枚举 + 双指针)。

16) 统计

核心:频次统计、在线统计、桶计数。
示例题:前 K 高频元素。


四、8 周学习计划(可直接执行)

  • 第 1-2 周(基础高频):数组、字符串、哈希表、双指针、二分。
  • 第 3-4 周(结构能力):栈、队列、链表、滑窗、排序、贪心。
  • 第 5-6 周(搜索与树图):递归、树、DFS、BFS、图。
  • 第 7 周(动态规划专项):线性 DP、背包、区间 DP。
  • 第 8 周(综合冲刺):并查集、前缀和、状态机、分治、回溯。

每天建议:

  1. 1 道模板题(20-30 分钟)
  2. 1 道变形题(30-40 分钟)
  3. 10 分钟复盘与错题归档

五、刷题时的“题型识别触发词”

  • “连续子数组 / 最长最短区间” → 滑窗、前缀和
  • “第一个满足条件的位置” → 二分
  • “最近更大/更小” → 单调栈
  • “最少步数(无权图)” → BFS
  • “方案数/最优值” → DP
  • “连通性/成环” → 并查集或图

把触发词写在错题本页眉,识别速度会明显提升。


六、给你的实战建议

  1. 不要按题号刷,要按题型刷。面试官考的是迁移能力。
  2. 每类保留 2 道“母题”,面试前反复复习。
  3. 代码模板化:二分模板、滑窗模板、DFS/BFS 模板必须肌肉记忆。
  4. 复盘比数量重要:1 道吃透 > 5 道走马观花。

如果你愿意,我下一篇可以直接给你一份:

  • 「必会 15 类各 3 道高频题清单(共 45 题)」
  • 每道题附难度、考点、标准解法模板

你可以按清单逐项打勾推进。

本文由作者按照 CC BY 4.0 进行授权