知乎:https://zhuanlan.zhihu.com/p/1976240523925800453
第一层:基础能力层 - 你的“武器库”
这是你的基本盘,是你解所有题的武器。这个阶段没有捷径,就是把基础打牢。根据我和朋友们面试的经验,以下这些是必须滚瓜烂熟的:
基础数据结构:数组、链表、栈、队列、哈希表(Map/Set)、堆(优先队列)。你要对它们的时间、空间复杂度了如指掌。
核心算法思想:
模拟(Simulation):这是100分题目的主力,考验的就是你把复杂文字逻辑翻译成代码的细心程度。
字符串处理:各种API、正则表达式,OD机考里字符串题占比极高。
排序与贪心(Sorting & Greedy):很多题目看似复杂,排序后思路就豁然开朗,局部最优解往往能推出全局最优解。
搜索(DFS/BFS):这是200分难题的常客。矩阵/迷宫问题、组合排列问题、图的遍历,必须能用模板秒写。
动态规划(DP):硬骨头,但也是高分关键。不需要啃骨灰级的难题,但经典的背包问题、路径问题、最长子序列等模型一定要理解透彻。
双指针/滑动窗口:处理数组和字符串问题的利器,能极大地优化时间复杂度。
第二层:题型识别层 - 你的“雷达”
这是从“会做”到“会思考”的关键一步。当你刷了足够多的题后,你需要开始总结规律,给自己训练出一个“题型雷达”。
看到“求最短/最少/最小…”,立刻想到 BFS 或 动态规划。
看到“迷宫”、“连通性”、“所有方案”,立刻想到 DFS + 回溯。
看到“子数组/子串相关”,立刻想到 滑动窗口 或 前缀和。
看到“在 O(1) 空间内完成”,立刻想到用 原地修改 或 位运算。
看到“第k大/中位数”,立刻想到 堆(优先队列) 或 快速选择。
当你能做到看到题目描述,脑子里就能自动弹出两三个备选的算法模型时,你就已经成功了一大半。无论题目怎么换,内核往往万变不离其宗。
第三层:编码实现层 - 你的“肌肉记忆”
光有思路不行,还得能快速、准确地写出来。这一层考验的是你的工程能力。
输入输出处理:这是新手的第一个坎。无论是哪种语言,先把标准的输入输出模板(读取多行、读取逗号/空格分割的数组等)背得滚瓜烂熟,形成肌肉记忆。考试时因为这个卡住,心态最容易崩。
边界条件处理:空数组、空字符串、索引越界、数值溢出… 面试官在看你的代码时,最关注的就是这些细节。养成习惯,写函数第一件事就是处理边界。
代码模板化:对于DFS、BFS、并查集、二分查找这类代码结构相对固定的算法,自己总结一套最顺手的模板。考试时直接默写框架,然后往里填核心逻辑,能节省大量时间。
三、实战冲刺策略:最后一周,我该做什么?
假设你还有一周就要考试,怎么安排最高效?
Day 1-2: 高频老题 + 错题回顾 把B卷题库里出现频率最高题型的前50道题快速过一遍,确保每一道都能在15-20分钟内写完。同时,把自己之前做错的题拿出来,重新做一遍,分析当时为什么错。
Day 3-5: 专项突破 + 新题攻坚 根据自己的薄弱环节进行专项训练。DP不行就专门刷一天DP,DFS不熟就专门练一天回溯。同时,开始接触B卷的新题,不要追求数量,而是要做一道,理解透一道,思考它属于哪个题型,用了哪些基础算法,有没有更优解。
Day 6: 至少两次全真模拟 这是最最重要的一步!找一个不被打扰的下午,严格按照150分钟的时间,完整地做一套三道题的模拟卷。目的是:
模拟压力:感受时间压力下的思维和编码状态。
测试策略:是先秒100分的,还是先开200分的?找到最适合自己的做题顺序。
演练Debug:当用例不过时,如何快速定位问题?是打印log,还是本地构造小样本?提前演练。
Day 7: 复盘调整,轻装上阵 把模拟考中暴露的问题再看一遍,主要是复盘,不要再做新题了。调整好心态,保证充足睡眠。相信自己的体系,而不是去赌某道原题。