刷题一年多,走过不少弯路,血泪啊,现将个人经验总结下,方便大家参考绕坑。
一、资源列表(将在第二部分介绍资源的使用顺序)
1. 视频课程(可以2倍速度播放):
1.1 基本【必看!】:算法与数据结构【166元,但物超所值,比看书快,且容易理解,老师是北航搞ACM的学长,全是干货,没有废话】 https://coding.imooc.com/class/chapter/71.html
1.2 进阶:玩转算法面试【266元,里面第三章教如何写出正确的代码,例如边界条件(< or <= 等细节)的确定等,有专业的方法,而不是靠猜和试!这点在本科的时候C语言等课上,印象里老师都没有教(问了几个师弟也是这么说的),觉得很遗憾】 https://coding.imooc.com/class/chapter/82.html
2. 书籍:
2.1算法:
2.1.1基础:《数据结构与算法分析——C语言描述》或者《数据结构与算法分析——JAVA语言描述》
2.1.2进阶:《算法设计与分析基础》
2.2语言:
2.2.1 基础:《Java核心技术卷一》(JAVA好找工作,且比C++简单,适合入门)
2.3刷题(配合1.2)
2.3.1基本:《剑指offer》,可在https://www.nowcoder.com/ta/coding-interviews 练习
2.3.2进阶:《程序员代码面试指南:IT名企算法与数据结构题目最优解》(可以看看作者的介绍:https://www.csdn.net/article/2015-10-23/2826015,里面提到“**很多算法对我的影响都很大,从开始时的很基础的排序算法,到后来看到的BFPRT、KMP、Manacher、蓄水池采样、skew、Morris遍历等等等等先贤们的成果,震撼我的次数已经数不清了。对自己的头脑变得越来越自信,这是最大的收获。 **” )
3. 刷题网站:
3.1 https://leetcode.com/problemset/all/ ,discuss区可以参考别人的答案,http://www.jiuzhang.com/solution/ 里也可以搜答案
4. 博客:《我的算法学习之路》https://blog.lucida.me/blog/on-learning-algorithms/
二、资源的使用顺序
1. 基本(约6个月,学习中以看视频和练习代码为主,实际上上述视频的内容已经很完整了,书籍不用看完):
(1) 看下4,体会算法有啥用,里面提到“如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。”
(2) 看1.1,并行看2.2.1,并行刷2.3.1的题目(不用刷完)
(3) 看2.1.1,并行刷3.1中前100题中的easy题目,不会的直接跳过。
(4) 看1.2,并行看2.1.2,并行刷3.1的题目前100题(hard不做),超过半小时想不出则看答案,看下别人的思路,自己的盲点,千万不要死磕!!
(5) 刷完2.3.1的题目
2. 进阶(6个月):
刷3.1的前300题
边理解,边手写2.3.2所有题解(你会发现面试时基本上遇到的题目都在里面了,而且是最优解,就是面试官要的答案)
另外,图搜索可以看看这个1元钱的课程:http://www.julyedu.com/course/getDetail/59 ,老师讲的很好,很受启发。。动态规划也是1元:http://www.julyedu.com/course/getDetail/53