算法面试通关 40 讲 · 深度学习指南(细化版)
作者:覃超(前 Facebook 工程师)| 真实结构:57 讲正文 + 回顾/答疑(共 62 个文件) 定位:大厂算法面试的「刷题 + 套路」实战课——每一类题配「理论讲解 + 面试真题」,是《数据结构与算法之美》学完后的应试强化。
一、这门课到底讲什么
这门课不是「再讲一遍算法」,而是「教你切题」:每讲都是「理论 + 一道经典面试题」,覆盖大厂笔试面试的高频题型。覃超老师反复强调的核心方法论是——面试中切题的「四件套」(澄清问题 → 想所有解法 → 写代码 → 测边界)。
二、真实讲次大纲(按模块)
模块 1:数组 / 链表 / 栈 / 队列(第 5–12 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 05 | 数组 & 链表 | —— |
| 06 | —— | 反转单链表、判断链表是否有环 |
| 07 | 栈 & 队列 | —— |
| 08 | —— | 判断括号字符串是否有效 |
| 09 | —— | 用队列实现栈 & 用栈实现队列 |
| 10 | 优先队列 | —— |
| 11 | —— | 返回数据流中的第 K 大元素 |
| 12 | —— | 返回滑动窗口中的最大值 |
模块 2:哈希表(第 13–16 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 13 | 哈希表 | —— |
| 14 | —— | 有效的字母异位词 |
| 15 | —— | 两数之和 |
| 16 | —— | 三数之和 |
模块 3:树(第 17–20 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 17 | 树 & 二叉搜索树 | —— |
| 18 | —— | 验证二叉搜索树 |
| 19 | —— | 二叉树的最近公共祖先 |
| 20 | 二叉树遍历(前/中/后/层) | —— |
模块 4:递归 / 分治 / 贪心(第 21–25 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 21 | 递归 & 分治 | —— |
| 22–23 | —— | Pow(x,n)、求众数 |
| 24 | 贪心算法 | —— |
| 25 | —— | 买卖股票的最佳时机 |
模块 5:BFS / DFS / 剪枝(第 26–33 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 26–27 | 广度 / 深度优先搜索 | —— |
| 28–30 | —— | 层次遍历、最大最小深度、生成括号 |
| 31 | 剪枝 | —— |
| 32–33 | —— | N 皇后、数独 |
模块 6:二分 / 字典树 / 位运算(第 34–42 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 34 | 二分查找 | —— |
| 35 | —— | 求解平方根 |
| 36 | 字典树(Trie) | —— |
| 37–38 | —— | 实现字典树、单词搜索 |
| 39 | 位运算 | —— |
| 40–42 | —— | 位 1 的个数、2 的幂、比特位计数、N 皇后位运算解 |
模块 7:动态规划(第 43–51 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 43–44 | 动态规划(上/下) | —— |
| 45–51 | —— | 爬楼梯、三角最小路径和、乘积最大子序列、股票买卖、最长上升子序列、零钱兑换、编辑距离 |
模块 8:并查集 / LRU / 布隆过滤器(第 52–57 讲)
| 讲次 | 理论 | 面试真题 |
|---|---|---|
| 52 | 并查集 | —— |
| 53–54 | —— | 岛屿个数、朋友圈 |
| 55 | LRU Cache | —— |
| 56 | —— | 设计 LRU Cache |
| 57 | 布隆过滤器 | —— |
三、必须吃透的核心方法论
-
切题四件套(第 59 讲精华):① 澄清问题(边界、数据范围);② 说出所有解法(暴力→优化,讲复杂度);③ 写代码;④ 用测试用例验证(含边界)。这套流程能让你在面试官面前「有条理」,而非「闷头写」。
-
链表题心法:反转链表、判断环,核心是「画图 + 双指针(快慢指针)」。快慢指针还能解决「找环入口、找中点」。
-
两数之和 → 哈希表:空间换时间。看到「查找是否存在」,第一反应是哈希表。
-
动态规划题的统一套路:定义状态 → 找状态转移方程 → 确定边界。爬楼梯、零钱兑换、编辑距离都是同一个套路的不同变体。
-
LRU Cache:哈希表 + 双向链表(还记得《数据结构与算法之美》第 20 讲吗?同一件事)。
四、引发思考
- 「判断链表是否有环」为什么用快慢指针(快 2 慢 1)?为什么它们一定会相遇?
- 滑动窗口最大值(第 12 讲)为什么用「双端队列」而不是普通队列?
- 「用队列实现栈」要几个队列?核心思路是什么?
- N 皇后用「位运算」怎么优化?(用 bit 表示哪些列/对角线被占用)
- 股票买卖系列(第 48 讲)是 DP 的经典题,状态怎么定义?
- 布隆过滤器为什么说「可能误判,但绝不漏判」?它和哈希表相比省了什么?
五、学完自测
- 能默写「切题四件套」并在刷题时实践
- 能独立写出:反转链表、两数之和、爬楼梯、LRU Cache
- 能说出常见题型的「套路关键词」(查找→哈希、最值→DP、连通→并查集)
- 刷完 LeetCode 高频 100 题
使用方式:先读《数据结构与算法之美》打底,再用本课「刷题 + 套路化」,最后拿 LeetCode 高频题练手。