面试常用算法 · 起点
把刷题变成认套路
基于经典算法知识(语言:Python 3.10+)· 阅读约 2 小时 · 代码均已在 CPython 3.11 本地运行验证。
一句话定位
面试题不靠逐题记忆,而靠把题目映射到少数几个"套路"。
§这份教程适合谁
适合谁
- 能用 Python 写出循环、递归、定义函数与类,读得懂
list/dict/set的基本操作。 - 刷过几十道题但仍"见到新题没思路",想要一套可迁移的判别流程,而不是再背 100 个解法。
- 准备后端 / 算法岗的编码面试(LeetCode 风格、手撕代码、白板)。
不适合谁
- 完全没写过代码——先学一门语言基础,推荐 语言入门类资源 或任意 Python 入门课。
- 要冲击 ACM / 竞赛金牌——本教程止步于面试高频,竞赛需要更深的数论、图论与数据结构,请找 OI/ICPC 专门训练。
- 只想临时查"某道题怎么解"——那是题解,不是这份系统教程的目标。
§读完之后你能做到什么
读完你会拥有一项文档和题解都给不了的能力:拿到一道没见过的题,先读数据规模约束估出目标时间复杂度,再用复杂度反推出"可能的套路只剩这几个",最后凭题目暴露的结构信号锁定其一——这套"约束 → 复杂度 → 套路"的判别链,正是区分"刷过 300 题还卡壳"和"没见过也能现场推"的分水岭。
具体地,你将能够:
- 看到
n ≤ 10⁵这类约束,立刻说出"目标是 O(n) 或 O(n log n),O(n²) 会超时"。 - 识别 6 大高频套路的结构信号:双指针 / 滑动窗口、二分、DFS、BFS、回溯、动态规划。
- 为"找子数组 / 找两数之和 / 求最值路径 / 枚举所有方案"这类题面,独立选出正确套路并说清理由。
- 用 Python 写出每个套路的模板代码,并改造模板套到变体题上。
- 在白板上讲清一个解法的时间与空间复杂度,以及它为什么正确。
一句话本质
面试题不靠逐题记忆,而靠把题目映射到少数几个套路;识别套路看的是题目暴露的结构信号(有序?子数组?最优子结构?),不是题面措辞——而复杂度约束往往先一步替你排除掉大半套路。
算法本身是冻结的经典 CS 知识,几十年未变。变化的是备战方法论:2020 年前后兴起的 Blind 75 / NeetCode 150 用"按套路分组"取代了"海量随机刷题",截至 2026-06 仍是主流。LLM 时代不少公司增加了系统设计、"AI 协作编码"等环节,但基于套路的编码面试依然是大厂筛选主力——本教程教的判别能力没有过时。
本教程在半交互下生成,已确认:语言 Python、形态"概念为主 + 可运行代码"、深度"全面(约 2 小时)"。其余按惯例默认:回溯归入"树与图"章(因为回溯本质是隐式决策树上的 DFS);并查集、字典树、线段树等留给后续深度专题,不在本教程范围。若与你预期不符,告诉我即可调整。
算法是最容易产生"假性掌握"的领域。看题解时这三种感觉都不是学会的证据:
「我读得很顺」——你读的是别人整理好的思路,不是自己推的;
「我做题很快」——你做的多半是见过的题型,换个壳就卡;
「我没卡壳」——没卡壳往往说明你在抄模板,没碰到真正要决策的那一步。
对策:每道例题先合上答案自己写,每个套路先自己说出它为什么成立,再往下看。本教程的 <details> 折叠块和"想一想"都是为此设计——忍住先点开的冲动。
§概念地图
§怎么读这份教程
- 只想理解按 01 → 07 顺序读,重点看每章的概念地图、"为什么需要它"和备选方案表,代码扫一眼即可。约 1.5 小时。
- 突击面试先读 01(复杂度反推)建立判别框架,再读 07(套路判别)看题面→套路的映射,最后回头精读你最弱的那一章。
- 带读/复习跳读每章的 self-check 与"想一想",答不上来的再回正文——用主动回忆找出你的知识盲区,比从头顺读高效。
§目录
- 01复杂度与约束反推Big-O 的真正用途不是炫技,是反推解法空间;约束 n 的规模直接告诉你目标复杂度。
- 02核心数据结构链表、栈、队列、堆、单调栈——结构的物理布局决定每种操作的复杂度,这是套路的地基。
- 03线性结构套路双指针 / 滑动窗口 / 前缀和 / 哈希表:用"不变量"把数组与字符串上的 O(n²) 压到 O(n)。
- 04二分与排序思想有序性是可以"造"出来的搜索加速器;二分不止查找,还能"二分答案"。
- 05树与图的遍历DFS / BFS / 回溯是同一种系统化穷举的不同副本;递归与队列互为镜像。
- 06动态规划与贪心最优子结构 → 记忆化 → 递推;贪心是"放弃回溯"的赌注,看它何时能赌赢。
- 07自测与套路判别给题面判套路的跨章辨析场景 + 三层梯度题库 + 亲手画概念地图。
§学完之后往哪走
- 并查集 / 字典树 / 线段树——在你的 schema 上补齐"为特定查询定制的数据结构"这一层。
- 图论进阶(最短路 Dijkstra、拓扑排序、最小生成树)——把第 05 章的遍历升级为带权、带约束的图算法。
- 大规模系统设计——面试的另一半:从"单机算法"走向"分布式架构与权衡"。
- 位运算与数学技巧——给你的判别链补上"看到特定数值特征就该想到位运算"的一类信号。