1. 刷题策略
课程推荐到leetcode上刷题,因为这里是面试题的集中地,认可度高,甚至其中很多题都是各大名企面试的真题。从面试官的角度来说,从leetcode中选择面试题的做法更为高效。而且,个人感觉,leetcode为算法题按照难度等属性对题目进行分类,更为重要的是,leetcode的评论质量较高,通过阅读别人的评论,也可以受益匪浅。
课上,老师认为leetcode前600道题是其精华所在,所以应该重点关注。但是不推荐盲目的从头到尾刷题,因为这样做针对性不强,效率也不高。可以把刷题分为三个阶段:
- 第一阶段
分专题掌握知识点,在此基础上进行知识拓展。
对于每个专题:
easy难度的题完成60%,medium难度的题完成30%,挑少量hard的题完成。 - 第二阶段
巩固知识脉络和手感,尽量确保每道题的解法最优。
easy的题全部做完,medium的题完成40-50。这一阶段的目的是提高速度和准确率。
对于easy的题,从读题到AC (Accept)应在5min内完成,且要每天做,保持手感。
对于medium的题,从读题到AC争取控制在20min内。 - 第三阶段
可以尝试着拔高,对学到的知识和技巧进行拓展。
这一阶段,要挑战难题,学习和使用高级算法和数据结构。最好能通过参加比赛提高自己的应试能力。
2. 课程规划
数据结构+算法
3. 小技巧和常见误区
- 运行速度和时间复杂度:不用执着于优化常数
- 空间复杂度:没特殊要求不苛求
- 语言选择:简易C++,python可能有坑
- 如何确定最优解法:
问面试官最优复杂度。如果面试官不愿意说(或者怕损失印象分),可以迂回的问一下数据范围(有些题会直接给出)。例如, 如果n=100W,那么n2超过108, 因此一般需要时间复杂度为O(n)或者O(NlogN) ;如果n=1000,那么时间复杂度可能是n2;如果20以内:那么甚至可能是2n。
4.算法面试注意事项
在面试的过程中,一定要保持冷静。
拿到题目后可以画样例进行分析,并积极和面试官交流。
然后分析特殊情况,边界条件。
再之后,分析一般情况,问问数据范围。
- 切记:
不要有冷场时间,尽量不要超过15分钟没有交流
如果有时间,想一想是否有好的办法。
通常,面试者需要在白板上写出代码,在这种情况下,要力保代码简明易懂,有能力加上一些注释。同时,注意代码风格,注释和变量名等“软实力”,当然,这些需要在平时的一点一滴的训练中积累经验。
5. 推荐书单
- 面向入门级:《算法图解》
- 经典书籍:《算法导论》 (Introduction to Algorithms)
- 不同编程语言书籍:《数据结构与算法分析:C语言描述》《数据结构与算法:python语言描述》
- 面向刷题和工作:《剑指offer》