我在初刷lintcode时总觉得智商不够用
学完DFS,做DFS不会;学完递归,做递归不会;学完DP,做DP不会;学完贪心,做贪心不会……
于是,我在题目讨论区看到一条高赞评论,上面赫然写着四个大字——“我是SB”,感同身受地点了个赞。
再后来,偶然得到了一份前FB工程师的刷题笔记,大佬不但给了正确的刷题方向,还告诉我:“不要为了刷题而刷题,先去把算法与数据结构的基础系统的学一遍。”
但我也踩了不少坑,有些书是买回来就搁置了的,还有些视频/网课听得我云里雾里,所幸,我慢慢摸到了门路,我总结了几个对提高数据结构和算法有用的网站/书籍:
《大话数据结构》以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。这本书的优点在于非常浅显易懂,内容趣味易读,但是算法的讲解十分细致,如果基础薄弱/0基础,很适合。
《九章算法基础班》网上形形色色看过不少课程和网课,最终选择了九章算法。我觉得它最大的优势在于Java+Python双语教学,可以掌握两门语言;于此同时,学习伪代码→输出真代码的学习路径,也更适合弱基础的同学。
课程开放了首节免费试听,老师会带你手把手coding,系统掌握数据结构与算法,含金量报表!
扫码免费试听,带你夯实算法基础
CodeGym一个在线Java编程课程,80%的内容是练习,适合一窍不通的入门者,刷LC之前可以用它过度一下。
这一阶段下来,我对算法与数据结构有了个比较系统的了解,后面刷题也就轻松得多了。
按考察频率刷题,才不会“怀疑智商”夯实了基础知识后,就可以开始刷题了,这时候刷题不至于会“怀疑智商”。
然鹅,此时第二座大山来了——题目那么多,要怎么快速刷完?
关于如何高效刷题,安利前FB资深工程师令狐冲老师的免费讲座——《FB面试官揭秘算法面试速成技巧-怎样做到BugFree和刷题等于别人题》
令狐老师总结了算法和数据结构的高频考点,颜色越深的考得越多,颜色越浅的考得越少,灰色很少会考到,如果是短期要参加算法面试,可以只刷高频题,节约了很多的时间。
同时开放免费试听,不妨体验一下
扫码免费试听前3节
关于算法面试知识点的难度和考察情况,以及推荐刷题数,令狐老师也有总结:
举个栗子字符串处理String:考的很多,主要注重代码实现能力,算法上没有太多难点,通常是处理麻烦。学习难度低,最少刷题20。
双指针算法TwoPointers:高频算法之王,变形特别多。算法不算特别难,但能快速想到和写好不容易。学习难度中,最少刷题20。
分治法Divide&Conquer:考察频率中等,一般和二叉树一起出现考察,题一般不难。学习难度低,最少刷题10。
宽度优先搜索BFS:考察频率高,实现一般都不难。
更多算法和数据结构知识点的考察情况,可以移步《九章算法班》听令狐老师的分享。
扫码免费试听
按知识点类目刷题,慢慢摸清“出题套路”我在课上跟着老师刷了一遍题,受到老师的启发,也总结了一些自己的刷题方法:
根据上面总结的高频知识点开始刷题。在你根据题目类别刷题时,刷的时候你就会感觉到题目变得比之前简单得多。而且题目刷得多了,你也能慢慢找出这类题的“套路”。
实际上,等我走出来后发现,在你做题的时候,就应该先判断某道题目是哪个类别的。
当然,有些题目有多个解法。在你做完一道题后,可以去思考一下能不能做到“一题多解”。
部分的hard题可能是两种解法结合,需要开拓思路。当你把hard题拆成两种解法后,你就会发现有些hard题并没有这么难,不过是在中等题加入了一些特殊条件,只需要运用两个知识点的解法也能解开。
回到算法面试中,如果面试中遇到hard题也不用担心:大胆地向面试官要提示,只要代码过关,面试也是能过的。
最后,我将算法和数据结构的高频考题整理成了一套《新手编程必刷50题》,大家可以刷刷看:
扫描