我相信,很多程序员,尤其是开发常常会这样自我疑问,【我平常工作都是拧螺丝,为什么要学习算法?】我之前也是如此,所以自从19年校招结束后,基本没有再认真学习过算法
刷算法的好处
- 写出bug更少的代码,避免加班
之前在腾讯的时候,我经常加班,但是有很多次加班都是因为自己的代码出了bug,从最简单的空指针,到数据解析,到边界处理等等,都多多少少犯过错,有一次一个if判断
List,本来应该先判空再比较长度,我是先比较长度再判空,结果提交后线上一堆crash,隔壁组长紧急拉群让我解决,贼尴尬
自从我开始重刷leetcode两个月后,看到一个问题,他潜在的风险马上就能猜个一二,能很快评估问题,以及想到解决办法
- 更好的理解源码的思想,应用在自己的代码里面,增强代码可读性和扩展性
很多著名的源码,如HashMap,conCurrentHashMap,mysql索引,等都用了大量的数据结构与算法,如果你没有这方面的基础,很难自己看懂,只能看别人的博客背八股文
20周刷算法
之前在知乎,看了一些,拼接抄袭的多,而且巨长,看得眼睛都花了
而且更多都是算法的罗列,压根没有可执行性
所以我做了一张图,并且设计了做题流程,可执行性高,需要花费20周,每天两小时即可
也就是一个学期的时间
分为三步走
-
剑指offer
每天3 ~4 题,三周刷完,不会的看题解,然后自己写出来
让你熟悉刷题的感觉,入门刷题
-
算法,三条线一起走
30分钟leetcode每日一题
让你了解哪里不懂,每日一题的知识点,或者是找一本做题书来做,重点是让每天做的题有随机性,常常命中自己的薄弱部分
通过每日一题,找《算法第四版》和《数据结构与算法》来读
也可以自行阅读,根据目录
《算法第四版》图多,讲解由浅入深,适合第一次接触某个算法时了解,排序,二叉树,红黑树部分非常精彩
《数据结构与算法》适合不断回顾,言简意赅,知识密度大,需要反复理解,反复阅读
这两本都是国外久经考验的教材,《算法第四版》是在接受了大量学生反馈只有专门修订出来的,对于学生初学算法时去学再适合不过了,数据结构与算法更是大浪淘沙后的算法精髓,两者都属于一流算法知识
这里不建议要看国内作者的书,这里并没有瞧不起他们的意思。主要是国内的教科书照本宣科的多,个人名义写的算法带有强烈的个人色彩,当参考书或工具书可以,尤其别看带有模板化的算法解题书,这种书很多都是借鉴网上题解博客,然后糅合到自己的书里面,容易误入歧途
找到tag练习自己所学的部分,
每种tag刷10~20道,这里建议dfs,动态规划,递归这些由于难度较大,需要多练习,多看题解。深入理解后,再在每日一题中遇到,你会变得很兴奋,做出来会有成就感,做不出来就再去书里面查漏补缺,然后再找tag练习……形成循环。
-
剑指offer 第二遍
不是才刚刷过剑指offer吗?不,真实情况你已经几个月没刷过了,而且第一次刷的时候因为基础不闹,往往很多都靠题解,早就忘了,所以需要高强度再刷一遍,而且完全靠自己
刷完之后?
答案其实很简单,当你刷完之后,那个时候的你自然能够回答了,
就像高考填志愿时你也不知道填什么,但是现在的你知道,如果当初的你问现在的你如何填志愿,我相信你能给那时的自己一个最好的答案
按照上面的步骤刷完之后,你也能自己去回答这个问题
而且此时你应该有约500道的题量,这个足够应对任何大厂的笔试和面试了
在刷题期间,你可能会知道leetcode周赛,牛客网,ACM,谷歌kickStart, codeJam等
当然如果有兴趣可以参加,不参加也没关系
参与每日一题吗?
最后,也是最难的,那就是坚持,我在B站【小松不漫步】进行每日一题的视频题解打卡,如果实在有一天太忙不想刷题,也可以看看哦,或者探讨题的其他解,最优解等
后面有时间会建一个刷题打卡群,有兴趣希望每日一题的小伙伴可以私信下,如果人多我就开始弄ღ( ´・ᴗ・` )比心