大多数程序员,工作主要以业务编码为主,涉及到算法很少,但是面试中总是会遇到面试官考算法问题,尤其是一线大厂和外企特别喜欢问算法相关的问题。每次想跳槽到更好的公司时准备算法是比较让人头痛的事情,一个原因是时间非常有限根本没有充足的时间去系统的学习算法,还有就是网上资料方法一大推不知道参考哪个资料好,也不知道如何下手。
其实准备算法这件事不是简单粗暴的拼智商,而是比较讲究技巧和方法的,接下来大家可以采用以下几个步骤来准备算法问题,可以让大家在有限的时间和精力下,获取最大的收益。
第一步选取学习资料很重要
选取资料方面,有的同学习惯是不管三七二十一先在网上搜罗一堆资料,然后慢慢挨个学,这种方式容易让大家找不到方向,花费大量时间不说还收效甚微。所以有一点要告诉大家别追求全面,讲究简单实用就行。
大家准备两个就行,一个教材,一个练习题,教材就推荐一个微信公众号“五分钟学算法”,上面对leetcode上面比较经典的题目进行了思路讲解,最最最主要的是它以动画的方式展示解题思路,这样帮我们快速直观的理解题目。在遇到不会做的题目时,可以在上面搜索相关题目并查看的解题思路。

关于练习的话我就推荐力扣,这是一个非常全面练习算法题目的网站。另外如果大家觉得自己算法基础比较薄弱,对一些基础的概念都比较模糊,额外推荐一本入门书籍《算法图解》,这门书不仅通俗易懂还生动有趣,非常适合帮助大家补齐数据结构和算法方面的基础知识。
第二步确定学习优先级
在准备算法面试的时候切忌大小通吃,要有选择性的学习。首先确定哪一类是面试中经常遇到的问题,哪一类是面试中很少遇到的问题,面试中经常遇到的问题就是热门问题,那么把它们定为为高优先级。然后根据优先级从高到低挨个突破,这样做可以让我们在复习时间不够的情况下把面试中最容易遇到的问题先覆盖到。那么哪些问题是面试中的热门问题呢?根据力扣官网统计各类算法题目在面试中出现的热度排名如下图所示:

确定优先级后大家可以按照优先级分类型突破,比如先在力扣上在热门题目里面找到数组类型相关的题目,先从easy难度的题目开始刷,按照难度循序渐进,大家不要看不起easy难度的题目,先刷这些题目可以帮我们树立信心,可以帮我们了解这个数据结构、基础概念、方法思路和常用的api。把数组的解决后在往后依次突破链表、字符串、栈、队列等相关的类型。

第三步总结思路并定期复习

在做题的时候不要做了就完了,一定要总结相关类型的解题思路,并把思路写下来。后面要反复复习我们的笔记并配合适当的练习,只要形成固定的解题思路,我们遇到相关类型的题目时,思路就比较清晰,而且在面试的过程中,我们即使做不出来,能把解题的思路分析出来,也能获得面试官的好感。最后要强调一点,一定要定期复习才能不断强化我们学到的知识。
最后给大家推荐一个很赞的算法课程,由拉勾和力扣(LeetCode)联合出品的《300分钟搞定算法面试》,google算法工程师带领大家花300分钟准备算法面试。