虽然现在很多人习惯直接刷题,但是我觉得如果时间允许,咱们还是得先把算法和数据结构的原理搞透。就像盖房子一样,地基打不好,房子迟早会倒。如果你每天能腾出两个小时,别急着点开LeetCode,先花两周时间把经典的排序、二分搜索、链表、哈希表、字符串KMP还有图的最短路径这些底层逻辑啃透。别嫌这些东西枯燥,这些才是面试官最爱问的“硬通货”。比如图的最短路径Dijkstra算法和最小生成树Kruskal算法,本质上都是贪心策略配合最小堆或者并查集来实现的。就像《算法4》这本书一样,它把索引堆、LPS数组还有KMP自动机这些看似冷门的技巧都写进去了。虽然代码有点绕,Java版的也没有标准库直接支持,但读一遍你会发现所谓的高级技巧,其实就是经典思想的组合。 《算法设计手册》也是个好东西,尤其是英文原版现在疫情期间免费开放。这本书把动态规划、贪心、回溯这些统统拆成模板,每一个模板后面都跟着标准题、变体还有坑点。看完再回头刷专题,就像给每道题配了隐藏攻略一样。关于刷题的顺序,力扣的免费版专题就足够咱们用了。按照数组、字符串、栈队列、链表、二分查找、堆递归这些难度阶梯来排就行。每刷完一个专题立刻去做周赛验证成果,发现哪里薄弱赶紧回头特训,效率最高。 不过现在的周赛越来越像竞赛风格了,Hard题越来越偏,出现的概率也低。如果你只剩一个月时间准备面试,直接把周赛当模拟面试就行;时间充裕的话可以把竞赛当进阶目标,但别忘了回归企业面试题库。毕竟月薪百万和月赛金牌不能兼得嘛。还有就是别觉得刷题就是背模板,关键是算法设计的能力。比如优先队列的最小堆和最大堆切换、二分搜索的左右端点逼近这些底层原理阶段就该埋好伏笔。 另外就是哈希表也不是黑箱操作,不管是Java的HashMap还是Python的dict,底层都是数组加链表或者红黑树的组合。像滚动哈希用双指针取模把字符串放进桶里,KMP用最长公共前后缀让模式串在文本里跳着走——这些小技巧其实都藏着哈希与分治两大思想。 最后说说面试的时候怎么回答问题吧。面试官不会直接告诉你要用动态规划还是二分搜索来解决。所以咱们得先抽象问题、选模型、写伪代码再调库函数。栈的单调栈思想、堆的贪心策略还有图论里的松弛操作都得当成状态转移来看待。这样面试时在草稿纸上就能秒写方程了。