话说,大家有没有被手撕算法给整抑郁过?我当初第一次做字节的算法题,直呼变态,确实比较难。
可能很多还没有参加过面试的同学还不知道手撕算法是什么,我这里简单解释一下:手撕算法简单来说就是完成面试官给你布置的算法题(有些公司提供思路即可)。
国内现在的校招面试开始越来越重视算法了,尤其是像字节跳动、腾讯这类大公司。绝大部分公司的校招笔试是有算法题的,如果 AC 率比较低的话,基本就挂掉了。
和框架应用类知识不同,算法仅仅通过一周甚至是一个月的突击是完全没办法快速上手的!
想要在算法面试中如鱼得水,就必须持之以恒地坚持刷题-> 总结->再刷题 -> 再总结。
你需要做的就是提前半年甚至是一年来刷 Leetcode,并总结一些常见题目类型的套路!
那我们应该怎么更高效低刷题呢? 给几点自己的刷题建议:
- 按照类型来刷 :一般情况下,一个类型的题目刷 5~10 道左右就够了!
- 由简入难 :刷算法是一个循序渐进的过程,如果你不是 ACM 大佬这种级别的人物的话,还是建议先从简单开始刷起,慢慢积累经验。不过,要说明的一点是:很多简单类型的题目甚至还要比中等类型的题目还要难!所以,如果你没办法解决一些简单的算法题,也不要太纠结,不要因此失去信心。
- 重点关注面试高频题目/题型 :如果你的时间不是很充足的话,建议可以从高频面试题入手。像 Leetcode 上面就专门把一些最热门的算法面试题给单独整理了出来。
- 多思考 :一定不要遇到不会的算法题就直接看别人的答案,这样会让自己形成依赖心理。一定要先思考,一定要多思考!
- ......
刷题之前,我建议你应该具有基本的算法基础。比如你应该搞清楚常见的算法思想(递归、动态规划、二分查找、贪心、分治、回溯、DFS、BFS、KMP、树的广度和深度优先搜索);再比如你可能还需要一点点的数学知识(比如位运算、质数)基础。
另外, 网上也有很多算法大佬开源了自己的刷题经验,这些经验都是前辈刷题之后得出的,非常具有参考价值。利用得当的话,可以极大减轻自己的刷题压力。推荐你看看我整理的 《阿里ACM大佬开源的Leetcode刷题指南》 。
没有学习过算法的朋友,建议上来不要看那些非常经典的书籍比如《算法导论》、《编程珠玑》,很可能直接就把你整懵了!
推荐你一本算法入门书籍 《我的第一本算法书》。这本书中没有枯燥的理论和代码,取而代之的是大量的配图帮助你理解算法的具体原理和执行过程。即使你是零基础也完全没有关系!
书中包含了 26 个基础算法以及 7 个数据结构的详解。非常适合用来快速入门算法和数据结构。
《算法》 这本书也相当经典!嗯,就是下面这本红不溜秋的书。
这本书涵盖了近 50 种常用的算法,每一种算法都介绍的非常详细深入!基础而全面!
相比于《算法导论》这类经典的书籍来说,《算法》更适合绝大部分人,不仅仅是因为其更加注重实践,更因为其对算法新手的非常友好。
《算法》每一章节后面都有对应的练习题,每一道练习题还有对应的答案解析。
书中给出了算法的实际代码,而非同类著作常用的伪代码。并且,代码是基于使用比较广泛的 Java 编程语言。
你可以在配套网站 https://algs4.cs.princeton.edu/ 上找到本书相关的其他资源比如代码实现、教学课件。
很多同学比较喜欢看视频,我这里也推荐几个算法相关的视频。
B站有UP主更新了 《算法第四版 - Course课程》,还是有中文字幕那种!值得一看!
对于算法面试突击的话,推荐左神的 《程序员代码面试指南(第 2 版)》 。
书中有180多道题,每一道题解都写的非常详细。并且,大部分题解都是先给出普通解法然后由浅入深地给出最优解,对常见的算法套路都进行了总结,非常用心。
左神在B站也更新了一个算法相关的视频 :《一周刷爆LeetCode》。
另外,身边有很多同学都非常推荐的一个算法视频是韩老师讲的《尚硅谷Java数据结构与算法》 。
这个视频的内容非常全面,涵盖了大部分常用的算法以及比较经典的一些算法问题比如排序算法、递归与回溯、迷宫问题、八皇后问题等等。
通俗易懂!目前在 B 站已经有接近 200w+ 播放量,2w+ 的点赞。