那北美Leetcode刷题按照什么顺序刷?我个人建议按照 Leetcode 给大家提供的专题顺序刷。大家点击力扣中文站的“学习”标签,就可以看到力扣为大家总结的各个专题。大家可以按照自己感兴趣的(或者薄弱的)专题刷。
在这里,我列一个最基本的顺序,大家可以参考。(我特意选择的是免费内容,对于其中的付费内容,大家可以根据实际情况自行选择。)
数组和字符串
数组类算法
栈和队列
链表
二分查找
堆
递归
二叉树
二分搜索树
N叉树
前缀树
哈希表
查找表类算法
深度优先
广度优先
动态规划1
动态规划2
初级算法
中级算法
高级算法
说实话,这些专题的问题已经相当多了。如果都能刷完,并且每个问题认真理解了,我觉得算法面试的问题已经不大了。
大家可以根据自己的情况,包括时间的多少,每个专题觉得自己刷得差不多了,就进入下一个专题。
而如果大家觉得自己各类问题都见过一些了,我建议在适当时候,进入下一阶段。
Leetcode 竞赛
从面试准备的角度看,单纯的按照专题刷题,是有问题的。
因为,一个问题的标签本身,其实是包含巨大信息量的,是一个很重要的提示。而大家在实际的笔试面试中,是没有这个提示信息的。
比如,如果直接告诉你,一个问题是动态规划,那么大家就可以直接去思考:怎么设计状态,状态转移是怎样的。这其实将问题简化了。如果没有这个标签,很多同学可能想不到这是一个 dp 问题。
在算法设计领域,这类问题特别多。另外一个典型的例子是二分搜索。对于一些问题,没有经验的同学,可能很难想到使用二分搜索去解决,但是一旦告诉你这个问题可以用二分搜索解决,其实就没什么难度了。
对此,我的建议是:刷题到一定程度以后,可以开始尝试做力扣(LeetCode)的周赛。甚至,有些同学时间紧,可能只有一个月的时间,没有时间专门系统地对每一类问题进行练习,我都直接建议,做周赛就好了。
大家可以把力扣(LeetCode)的每一次周赛,都看作是一场实际的算法面试的模拟。
力扣(LeetCode)的周赛每期四个问题,问题质量都很高。每场比赛的问题类型不定,没有标签。大家在做的时候,需要从头分析,每个问题需要使用什么算法解决。这在我看来,是非常重要的一个训练。
在这个过程中,如果发现自己对某一个类型的问题不熟悉,可以再回头,有针对性地根据专题进行“特训”。
但是,大家也要注意,现在力扣周赛的一些问题,尤其是 Hard 问题,越来越偏竞赛问题,这种竞赛问题,在面试中出现的概率极低。所以整体,我认为,大家如果能在周赛中,做到稳定做出三道问题,应付大多数算法面试已经够了。
如果对 Hard 级别的问题感兴趣,整体上,在力扣上,题号越靠前的 Hard 问题,会相对“简单”一些,也更“标准”一些,更容易是面试过程中可能考察的问题。而相对比较新的问题,在最近一年,Leetcode 周赛的 Hard 问题,个人认为越来越偏竞赛问题。
当然如果有同学对竞赛问题感兴趣,也可以学习。当然,如何深入学习训练算法竞赛,就完全是另一个话题了。