1. 10分钟过脑课到底在过什么
算法学习路线被写来写去,但真正能让你在脑内形成一张地图的,往往不是几百小时的系统课程,而是这条10分钟算法学习路线过脑课。它没有铺开讲排序源码,也没有堆出几十个刷题链接,而是把“学算法到底走哪条路”这件事压缩成了一条主线。我反复听了几遍之后,最大的感受是:它解决的不是“你还没学会某个算法”,而是“你根本不知道自己该按什么顺序学,以及每个知识点之间是什么关系”。
很多非科班或自学入门的同事,最容易陷入两个状态:一是买了大几百块的课程,看了两周还停在数组和链表;二是一头扎进刷题平台,按“简单题列表”刷了50道,面试还是不会做变形题。问题不在于努力不够,而在于脑内没有路线。10分钟过脑课的价值,就是把“什么是重点、先学什么后学什么、每个结构/算法到底解决什么问题”快速播一遍,让你哪怕没记住全部细节,也能在之后每次遇到题时,知道自己应该去哪里查、从哪里想。所以它更适合三类人:刚开始学算法的新手,想重新整理知识树的进阶者,以及需要带人入门、想快速讲清框架的工程师。
10分钟不是用来精读的,是用来种锚点的。锚点越多,后面看长教程、刷题复盘时越不容易迷路。下面我就把这条过脑课拆开揉碎,按我自己的理解和实操经验,整理成一份可以直接拿去用、甚至可以自己再讲一遍的完整笔记。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 路线设计的三个隐性原则:为什么顺序比数量更重要
2.1 先数据结构后算法,这是决策顺序,不是课程顺序
如果只看课程目录,很多人会以为“数据结构是一章、算法是另一章”,但我建议你换一个角度理解:算法是作用在数据结构上的动作集合。没有数组和链表,二分和排序就没有载体;没有栈,回溯就没有办法实现;没有队列,BFS就真的只剩一个名字。所以过脑课把数据结构放在前面,不是为了按部就班,而是为了形成一种思考习惯:拿到问题,第一步先选结构,第二步再想策略。
这条原则我测试过很多次。带新人练题时,我有一个固定的开场白:你先别说用什么算法,先告诉我,这个问题里的数据应该放在什么结构里。只要对方能答出“这里需要一个栈”“这里需要一个哈希表”,接下来的方向通常就不会太歪。反过来,一上来就背“动态规划五部曲”的人,遇到需要把二维数组转成一维数组的题目,很容易卡住,因为结构意识不强。
这个原则还有一层隐性含义:数据结构学多少、学到什么深度,应该由算法需求倒推。比如你暂时不学并查集,去看需要并查集的题目就会非常吃力;你只需要学会“集合合并+查询”这个模型,后面很多连通性问题都会自动归入这一类。先有结构概念,再谈算法优化,顺序上不要反。
2.2 先基础后专题,是在给你的大脑建“索引”
过脑课里提到的路线基本可以浓缩成一张虚线图:数组、链表、栈、队列、哈希表是底层底座;树、堆、并查集、图是进阶结构;排序、二分、递归、DFS/BFS、动态规划、贪心是常用算法层;字符串、线段树、数位DP等属于专题层。为什么必须让基础结构先进脑?因为这些基础结构是其他一切知识的接口。你如果对栈的“后进先出”没有肌肉记忆,那么看到“函数调用栈”“括号匹配”“表达式求值”这些具体问题时,就会觉得它们分别是三个新知识,而看不到它们背后其实是同一件事。
专题层之所以放最后,是因为它通常依赖多个基础结构叠加。比如字符串哈希需要哈希表,滑动窗口需要数组/哈希表配合双指针,线段树需要树的递归思维加上区间操作。你还没把数组和递归内化,强行学线段树,只会得到一个“背模板但不懂为什么”的空中楼阁。
这个“索引”想法的好处是,你随时可以按图索骥。遇到“求两个元素是否在一个集合”的问题,索引会告诉你“去看看并查集”;遇到“需要频繁找最大最小”的问题,索引会告诉你“去堆那里”。不会出现一种常见尴尬:刷题刷到某个知识点,但根本不知道自己缺哪块。
2.3 先暴力后优化,是建立算法直觉的唯一捷径
这是整条路线上最容易被人跳过的一环。很多初学者看题解,只看最终优化版,觉得“能跑就行,过程不重要”;但过脑课的内部逻辑恰恰相反,它建议你先写一版最直接的暴力解,哪怕时间复杂度是O(n^2)甚至O(2^n),也要先能“跑得对”,再去分析它的冗余在哪里。
这句话为什么要反复强调?因为优化的本质就是找冗余。两数之和暴力解是双重循环;你写出双重循环,才会发现内层循环在反复查找已经见过的值,然后才会自然想到用哈希表去重。如果一个初学者直接看哈希表版本,他可能记住了一个技巧,但没记住引出技巧的推理链。下一次换成“三数之和”,如果你没有“先暴力再发现重复枚举”的经验,就会卡在怎么更新双指针上。
我自己带人的时候会强制要求:新题必须先写暴力解法,再写优化版。哪怕有些题一看就有模板,也要把暴力解在草稿纸上画一遍。这个习惯坚持二十道题后,你会发现自己不再需要背模板,而是能自己推导模板,因为你知道模板是从哪个暴力过程里“长出来”的。
3. 核心路线拆解:数据结构到底要重点记住什么
3.1 底层五件套:数组、链表、栈、队列、哈希表
10分钟过脑课不可能把每种结构讲透,但它一定会给出一句“选型口诀”,把这五件套的使用场景钉在脑子里。按我自己的记忆方式,是这样的:
- 数组:随机访问O(1),适合按下标取数;但中间插入删除要搬数据,O(n)成本往往被新手忽略。
- 链表:插入删除O(1),适合频繁增删;但访问第k个元素要遍历,O(n)。
- 栈:后进先出,适合函数调用、括号匹配、表达式求值、撤销操作。
- 队列:先进先出,适合任务排队、广度优先搜索的“待访问集合”。
- 哈希表:平均O(1)查找,用空间换时间,是“去重”“快速判断存在性”的第一选择。
关于哈希表,我要多说一句。它在工程语言里就是字典、映射、Map,但很多人没意识到它在算法题里的核心作用是“把查找复杂度降维”。你在暴力循环里反复对一个集合做查询,耗时可能很高;先把元素放进哈希表,再用一次遍历去查配对值,往往能把O(n^2)降到O(n)。这就是空间换时间最经典的例子。
不过哈希表也有代价:无序、内存占用高、有哈希碰撞风险。在面试里回答“为什么用哈希表”,不要只说“查找快”,要能补一句“查询需求和内存代价的权衡”,这会显得你真的理解过。
3.2 树是递归思维的训练场,别一开始就死背遍历
过脑课讲树的时候,很多人的第一反应是去背先序、中序、后序遍历的代码。但我个人建议:树这个结构,最该练的是“递归视角”。先序遍历的本质只有三句话:先访问当前节点,再递归左子树,最后递归右子树。节点为空就返回。你会发现这里没有“背诵”,只有“子问题”。
二叉树之所以值得重点投入,是因为它训练你对递归的理解,而递归几乎是一切高级算法的上游。掌握递归之后,树的遍历、树的深度、翻转二叉树、路径和这些问题都会变得很顺。
堆也是树形结构,但10分钟里不需要讲太深,只需要记住两条关键操作:插入时向上比较交换,删除时向下比较交换。这两条规则对应两个口语词:上浮、下沉。很多人在笔试时写堆排序,最容易错的就是在删除堆顶之后,忘了要“用最后一个叶子补位,再进行下沉”。如果你在过脑课阶段就把这个操作顺序刻进脑子,后面实现堆和最值问题都会稳很多。
3.3 进阶结构:并查集、“最小生成树”思想、图的出场顺序
并查集是很多新手学到比较晚、但面试又常考的结构。它的核心能力总结成一句话:快速判断两个元素是否在同一个集合里,以及合并两个集合。它的代码很短,主要是find()和union(),但真正的难点在于“路径压缩”和“按秩合并”这两个优化。过脑课只要让你知道有这样一个结构存在、它解决什么问题,就算完成了任务。具体的实现细节可以等遇到连通性题目时再针对性补。
图可以理解成树的升级版:树是“有层次”的,图是“无规则”的。图的存储方式(邻接矩阵、邻接表)应该放在图算法之前掌握。为什么?因为DFS/BFS的性能表现依赖这两个存储结构。邻接表省空间、适合稀疏图,但它遍历邻居时需要小心重复访问;邻接矩阵直观、查边很快,但空间浪费明显。你至少要能说出这个权衡,才不算是“只背了遍历代码”。
如果你觉得“学完树再学图,知识量陡增”,不用急。你看“最短路径”里的Dijkstra算法,思想类似BFS+优先队列;你看“最小生成树”里的Prim算法,又几乎是从一个起点不断找最小临边的过程。它们都能和你已经掌握的堆、BFS挂上钩,这就是先把基础结构过一遍脑的回报。
4. 算法主线怎么串:从递归一直走到动态规划和贪心
4.1 递归不是“函数调用自己”,而是“把问题缩小”
递归是算法主线里最先要站稳的点。很多教材爱用阶乘讲递归,我觉得效果不如楼梯问题:一个人上n级台阶,每次可以走1级或2级,问有多少种走法。这个问题里,f(n)=f(n-1)+f(n-2)并不是“硬背的递推式”,而是“你这一步只有两种选择,分别通向两个更小的子问题”。
递归三个核心要素:终止条件、子问题拆分、本层逻辑。很多人写递归出错,是因为没有先写好终止条件。你先想清楚“当问题足够小、不需要再递归时返回什么”,再想“这一步要做什么、下一步交给递归去做什么”。这个思维顺序比写代码本身更重要。
递归学习过程中,还有一个必须知道的概念:记忆化递归。很多递归会重复计算,比如斐波那契的朴素递归会指数级膨胀。你不需要急着学动态规划,只要在递归里加一个缓存,记录已经算过的子问题,复杂度就会立刻降下来。这也为后面理解“动态规划为什么要记录状态”埋下了伏笔。
4.2 DFS/BFS别只背模板,要分清“存在性”和“最优性”
DFS和BFS都是遍历结构的方法,但适用场景很不一样。DFS适合“是否存在一条路径”“列出所有组合/排列”“回溯尝试所有可能”;BFS适合“从起点到终点的最短路径/最少步数”。为什么BFS能找到最短?因为它是按层扩展的,第一次扫描到目标节点时,当前层数一定最小。DFS则可能一头扎进一条长路,就算找到了目标,也不一定是最近的。
我常用的生活化类比是:DFS像你在迷宫里沿墙走,一条路走到黑,走不过去就退回到上一个岔路口;BFS像一颗石子丢进水面,一圈一圈向外扩散,碰到岸的那一圈一定是最早碰到。过脑课里如果能把这两个场景分开,后面做网格类、图遍历类题目会非常清晰。
背模板本身没有错,但你要在模板之上多问一个问题:这个遍历为什么要用visited数组?本质上是为了避免在图有环的时候无限循环。对人脑来说,这个“防回头”思想比“visited数组写哪儿”重要得多。
4.3 动态规划的关键状态,而不是公式
动态规划是很多人的心理阴影,因为网上有太多“DP五部曲”“状态转移方程背不住”的声音。但过脑课给我的启发是:DP没有你想的那么玄,它是在一个大问题能分解成“重叠子问题”时,用记录结果来避免重复计算。
判断一个题能不能用DP,有一个很实在的口诀:能不能从更小的状态推出当前状态?如果答案是“能”,并且这个状态会反复出现,就值得用DP。比如背包问题里,当前i件物品、容量为j时的最大价值,可以由“选不选第i件物品”的前置状态推出来,这就是一个典型的DP场景。
实操上,我学DP时最顺的路径是:先写暴力递归,然后加记忆化缓存,最后改成自底向上填表。三步走,每一步都能看到优化效果。很多人一上来就想直接写“自底向上循环”,却搞不清dp数组每个下标表示什么,反而容易卡住。从递归走到DP,是理解成本最低的路径。
4.4 贪心要小心“局部最优不等于全局最优”
贪心算法听上去很简单:每一步都做当前看起来最好的选择。但它和DP最大的区别是:DP会考虑所有可能的子问题选择;贪心只挑一个看起来最牛的选项,然后要求这个选择链最终仍然全局最优。所以贪心必须被证明或至少用反例检验。
经典的反例就在零钱兑换问题里:如果面额是1、5、11,需要凑15,贪心会先选11,再选4个1,结果是5枚硬币;但正确解是3枚5元硬币。这就是“局部最优毁掉全局最优”的典型。遇到这类题,我的建议是不要一开始就认定它是贪心,先想能不能暴力枚举或DP,再考虑贪心策略是否安全。10分钟的过脑课只能帮你建立这个警惕意识,真正的判断能力需要靠几十道辨析题来练。
4.5 排序和二分:学了不一定会考,但一定会影响刷题手感
排序算法本身并不难,难的是理解复杂度、稳定性、应用场景。快速排序平均O(nlogn)、原地排序、递归分治;归并排序稳定、需要额外空间;堆排序原地但不稳定。这些特性要能脱口而出。因为很多题并非真的考排序,而是考“能不能借助有序性降低复杂度”。比如合并区间这类题目,第一反应就应该是“先排序,再扫一遍”。
二分查找则要理解“不变量”思想。你不需要背模板,只需要盯住一个问题:每次循环后,答案仍然在哪个区间内?只要这个区间是明确收窄的,边界怎么写都对。很多人写二分时边界改三次,根本原因是脑子里没想清楚当前[mid]和区间收缩逻辑。我建议你练习时把“为什么这边要加一、那边为什么不加一”写在注释里,而不是复制一份模板了事。
5. 10分钟该怎么听、怎么讲、怎么留记忆点
5.1 时间盒方案:2分钟定位、3分钟结构、3分钟算法、2分钟自检
10分钟过脑课最好的结构不是从头念到尾,而是用四个时间盒来装内容。我给自己和学生都用过如下分段:
| 时间段 | 内容 | 核心目标 |
|---|---|---|
| 0-2分钟 | 路线三原则:先结构后算法、先基础后专题、先暴力后优化 | 让大脑知道“今天学的是一张地图” |
| 2-5分钟 | 数据结构底线清单:数组、链表、栈、队列、哈希表、树、堆、并查集 | 建立选型直觉,记住“什么问题找什么结构” |
| 5-8分钟 | 算法主线:递归、DFS/BFS、DP/贪心、排序/二分 | 理解算法是结构上的动作,并能串成链 |
| 8-10分钟 | 常见误区、一题自检口诀 | 防止过完就忘,留下可操作的回看清单 |
这个时间盒之所以好用,是因为它把“信息量”压到刚好能记住的限度。心理学上人的工作记忆容量很有限,10分钟里塞十个知识点,等于没讲。宁可每个部分只给一句核心金句、一个例子,也不要追求大而全。
如果你是讲师或带人者,注意每过几分钟就停顿一下,做一个“回头总结”:刚才那三分钟,你记住了哪个数据结构?为什么?如果你是听众,手边放一张白纸,听到一个名词就在纸上写下一个关键词。不要试图记代码,代码课后可以去翻文档。
5.2 记忆锚点:五句可以直接背下来的口令
过脑课结束之后,你可以只带走五句话作为“启动钥匙”。这五句话我在带人时反复使用,几乎每个人都能立刻用上:
- 算法是作用在数据结构上的策略。
- 拿到问题先选结构,再想算法,最后算复杂度。
- 先写暴力解,再从暴力解里找冗余。
- 递归是很多高级算法的发动机,思考时先缩小问题。
- 查找靠哈希,排队靠队列,回溯靠栈,最优子结构靠DP。
这五句话不需要证明,它们是你接下来刷题、看视频、复习时的回看锚点。你会在后续学到某个具体题时突然想起其中一句,然后发现那个题正好落在某句话下属的例子上。
5.3 课后自检:30秒新题定位法
过脑课的一个重要价值是给你一个自检流程。我在给新人定练习计划时,通常要求用下面这套流程看每一道新题。它不是答题模板,而是快速归类的启动器:
- 暴力解法是什么?能写出来吗?复杂度是多少?
- 问题能否自然拆成更小的子问题?如果可以,考虑递归或DP。
- 问题关心“最短”“最少步数”吗?如果是,考虑BFS。
- 需要频繁查找存在性、去重、配对吗?如果是,考虑哈希表。
- 数据是否有序,或者可以排序后更容易处理?如果是,考虑二分、双指针或前缀和。
如果你在30秒内无法回答前两个问题,说明你的基础结构还没有完全过脑。这时候不要急着看题解,回到数据结构地图上,补对应的那一块。这个流程比“一天刷十道题”有效得多,因为它是按知识块去查漏,不是按题号去堆量。
6. 新手必踩的坑和我自己的避坑经验
6.1 误区一:只刷题不复盘,刷满一百道仍然不会迁移
我自己早期也走过这个弯路:每天清理“简单+中等”题,看起来很有成就感,但遇到同一知识点的变形题还是会懵。后来我统计了一下,真正让我进步的不是做题数量,而是“复盘时写过的那几行注释”。建议每一道题都写下三句话:用了什么结构、为什么用这个结构、如果数据规模扩大十倍还能不能跑得动。如果没有这三句话,刷题只是在验证你已经会的东西,而不是在扩展你的边界。
6.2 误区二:“会写模板”不等于“会算法”
有次我带人看一道二分变体题,对方写了十分钟模板,但一直改边界,原因是他只背了经典写法,没想清“当前排除了哪一半”。这一点非常典型。算法学习的核心不是背诵代码,而是理解代码背后的不变式。如果一个模板换一个输入样例就崩,说明你还停留在手熟阶段,没有进入理解阶段。
6.3 误区三:跳过暴力解,上来就追最优解
刷题平台上常常能看到“最优解”标签,但我在实际带人的过程中发现:直接看最优解的人,下次重做该题时大概率还是不会,因为最优解是推理的结果,不是起点。暴力解的意义在于提供一个“至少正确”的基线,让你有机会对比优化后到底快了多少。没有这个对比,你甚至无法验证优化是否值得。
6.4 误区四:数据结构、算法、复杂度分开学
很多课程会分成三个模块,但如果你的目标是能解决算法题,那么这三样东西必须同时进入脑内。你每学一个新的数据结构,都要立刻问:它支撑什么算法?它的操作成本是多少?哈希表的查找成本是O(1)均摊,堆的插入和删除是O(logn),树的高度决定了递归深度。这些信息放一起记,才可能形成真正的“运行时间直觉”。
6.5 误区五:10分钟结束就急着关页面,没有做复述
过脑课最容易被忽略的环节是“复述”。你听完10分钟,如果没有用纸笔画一次知识树,第二天就忘了一大半。我的做法是:听完后不看任何笔记,尝试画出“数据结构树”和“算法主线链”,画不出来就回去看对应的部分。这个动作通常只需要5分钟,却能让记忆留存率明显提高。你可以把这一步当成这10分钟课的第11分钟。
最后再分享一个我的个人习惯:我会把五句口令写在一张卡片上,每次准备刷题之前先默念一遍。如果哪道题卡住超过15分钟,我就把卡片拿出来,重新定位自己到底是在选结构上卡住,还是在算法套路上卡住,然后只补那一块。这套方法帮我很快跳出了“刷题量很大但脑子很乱”的状态,希望它对你也有用。
