算法面试通关 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——岛屿个数、朋友圈
55LRU Cache——
56——设计 LRU Cache
57布隆过滤器——

三、必须吃透的核心方法论

  1. 切题四件套(第 59 讲精华):① 澄清问题(边界、数据范围);② 说出所有解法(暴力→优化,讲复杂度);③ 写代码;④ 用测试用例验证(含边界)。这套流程能让你在面试官面前「有条理」,而非「闷头写」。

  2. 链表题心法:反转链表、判断环,核心是「画图 + 双指针(快慢指针)」。快慢指针还能解决「找环入口、找中点」。

  3. 两数之和 → 哈希表:空间换时间。看到「查找是否存在」,第一反应是哈希表。

  4. 动态规划题的统一套路:定义状态 → 找状态转移方程 → 确定边界。爬楼梯、零钱兑换、编辑距离都是同一个套路的不同变体。

  5. LRU Cache:哈希表 + 双向链表(还记得《数据结构与算法之美》第 20 讲吗?同一件事)。


四、引发思考

  1. 「判断链表是否有环」为什么用快慢指针(快 2 慢 1)?为什么它们一定会相遇?
  2. 滑动窗口最大值(第 12 讲)为什么用「双端队列」而不是普通队列?
  3. 「用队列实现栈」要几个队列?核心思路是什么?
  4. N 皇后用「位运算」怎么优化?(用 bit 表示哪些列/对角线被占用)
  5. 股票买卖系列(第 48 讲)是 DP 的经典题,状态怎么定义?
  6. 布隆过滤器为什么说「可能误判,但绝不漏判」?它和哈希表相比省了什么?

五、学完自测

  • 能默写「切题四件套」并在刷题时实践
  • 能独立写出:反转链表、两数之和、爬楼梯、LRU Cache
  • 能说出常见题型的「套路关键词」(查找→哈希、最值→DP、连通→并查集)
  • 刷完 LeetCode 高频 100 题

使用方式:先读《数据结构与算法之美》打底,再用本课「刷题 + 套路化」,最后拿 LeetCode 高频题练手。