算法题型汇总学习教程(必会 + 进阶)
按频率和难度拆解 31 个算法题型,给出学习顺序、刷题方法和每类示例题思路。
这篇给你一份可以直接执行的「题型学习路线图」:先搞定必会,再冲击进阶。每个题型都给你:
- 学什么(核心知识点)
- 怎么练(推荐训练方式)
- 示例题(含思路)
适合人群:准备算法面试、刷 LeetCode/牛客、想系统补齐数据结构与算法基础。
一、如何使用这份题型表
你给出的顺序已经非常合理:序号越小,出现频率越高。
建议节奏:
- 先必会后进阶:先拿到稳定分,再追求上限。
- 每个题型 3 步:模板题 3 道 → 变形题 3 道 → 综合题 2 道。
- 做题复盘三件事:
- 这题属于哪个题型?
- 为什么我的第一反应会错?
- 下次用什么“触发词”快速定位解法?
二、必会题型(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 道模板题(20-30 分钟)
- 1 道变形题(30-40 分钟)
- 10 分钟复盘与错题归档
五、刷题时的“题型识别触发词”
- “连续子数组 / 最长最短区间” → 滑窗、前缀和
- “第一个满足条件的位置” → 二分
- “最近更大/更小” → 单调栈
- “最少步数(无权图)” → BFS
- “方案数/最优值” → DP
- “连通性/成环” → 并查集或图
把触发词写在错题本页眉,识别速度会明显提升。
六、给你的实战建议
- 不要按题号刷,要按题型刷。面试官考的是迁移能力。
- 每类保留 2 道“母题”,面试前反复复习。
- 代码模板化:二分模板、滑窗模板、DFS/BFS 模板必须肌肉记忆。
- 复盘比数量重要:1 道吃透 > 5 道走马观花。
如果你愿意,我下一篇可以直接给你一份:
- 「必会 15 类各 3 道高频题清单(共 45 题)」
- 每道题附难度、考点、标准解法模板
你可以按清单逐项打勾推进。