CS刷题个人经验

刷题一年多,走过不少弯路,血泪啊,现将个人经验总结下,方便大家参考绕坑。

目录

  • 一、资源列表(将在第二部分介绍资源的使用顺序)
    • 1 视频课程(可以2倍速度播放)
      • 1.1 基本【必看!】
      • 1.2 进阶
    • 2 书籍
      • 2.1 算法:
        • 2.1.1 基础
        • 2.1.2 进阶
      • 2.2 语言:
        • 2.2.1 基础
      • 2.3 刷题(配合1.2)
        • 2.3.1 基本
        • 2.3.2 进阶
    • 3 刷题网站:
      • 3.1 leetcode
    • 4 有关博客
  • 二、资源的使用顺序
    • 1 基本
      • 1.1 了解算法
      • 1.2《算法与数据结构》《Java核心技术卷一》
      • 1.3 《数据结构与算法分析——JAVA语言描述》刷leetcode
      • 1.4 《玩转算法面试》《算法设计与分析基础》
      • 1.5《剑指offer》
    • 2 进阶(6个月):
      • 2.1 刷[leetcode](https://leetcode.com/problemset/all/)的前300题

一、资源列表(将在第二部分介绍资源的使用顺序)

1 视频课程(可以2倍速度播放)

1.1 基本【必看!】

《算法与数据结构》【166元,但物超所值,比看书快,且容易理解,老师是北航搞ACM的学长,全是干货,没有废话】https://coding.imooc.com/class/chapter/71.html
该刘宇波老师的github
https://github.com/liuyubobobo/Play-with-Algorithms

《算法与数据结构》视频目录
第一章:当我们在讨论算法的时候,我们在讨论什么?
1-1 我们究竟为什么要学习算法
1-2 课程介绍
第二章:排序基础
2-1 选择排序法
2-2 使用模板(泛型)编写算法
2-3 随机生成算法测试用例
2-4 测试算法的性能
2-5 插入排序法
2-6 插入排序法的改进
2-7 更多关于O(n*2)排序算法的思考
第三章:高级排序问题
3-1 归并排序法
3-2 归并排序法的实现
3-3 归并排序法的优化
3-4 自底向上的归并排序算法
3-5 快速排序法
3-6 随机化快速排序法
3-7 双路快速排序法
3-8 三路快速排序法
3-9 归并排序和快速排序的衍生问题
第四章:堆和堆排序
4-1 为什么使用堆
4-2 堆的基本存储
4-3 Shift Up
4-4 Shift Down
4-5 基础堆排序和Heapify
4-6 优化的堆排序
4-7 排序算法总结
4-8 索引堆
4-9 索引堆的优化
4-10 和堆相关的其他问题
第五章:二分搜索树
5-1 二分查找法
5-2 二分搜索树基础
5-3 二分搜索树的节点插入
5-4 二分搜索书的查找
5-5 二分搜索树的遍历(深度优先遍历)
5-6 层序遍历(广度优先遍历)
5-7 删除最大值,最小值
5-8 二分搜索树的删除
5-9 二分搜索树的顺序性
5-10 二分搜索树的局限性
5-11 树形问题和更多树。
第六章:并查集
6-1 并查集基础
6-2 Qucik Find
6-3 Quick Union
6-4 基于size的优化
6-5 基于rank的优化
6-6 路径压缩
第七章:
7-1 图论基础
7-2 图的表示
7-3 相邻点迭代器
7-4 图的算法框架
7-5 深度优先遍历和联通分量
7-6 寻路
7-7 广度优先遍历和最短路径
7-8 迷宫生成,ps抠图–更多无权图的应用
第八章:最小生成树
8-1 有权图
8-2 最小生成树问题和切分定理
8-3 Prim算法的第一个实现
8-4 Prim算法的优化
8-5 优化后的Prim算法的实现
8-6 Krusk算法
8-7 最小生成树算法的思考
第九章:最短路径
9-1 最短路径问题和松弛操作
9-2 Dijkstra算法的思想
9-3 实现Dijkstra算法
9-4 负权边和Bellman-Ford算法
9-5 实现Bellman-Ford算法
9-6 更多和最短路径相关的思考
第十章:结束语
10-1 总结,算法思想,大家加油!

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 leetcode

leetcode 刷题
https://leetcode.com/problemset/all/ ,discuss区可以参考别人的答案,http://www.jiuzhang.com/solution/ 里也可以搜答案

4 有关博客

《我的算法学习之路》http://blog.jobbole.com/67348/

二、资源的使用顺序

1 基本

(约6个月,学习中以看视频和练习代码为主,实际上上述视频的内容已经很完整了,书籍不用看完):

1.1 了解算法

看下《我的算法学习之路》,体会算法有啥用,里面提到“如果你想成为一个码农或是熟练工(Code Monkey),你大可以不学算法,因为算法对你确实没有用;但如果你想成为一个优秀的开发者(Developer),扎实的算法必不可少,因为你会不断的掉进一些只能借助算法才能爬出去的坑里。”

1.2《算法与数据结构》《Java核心技术卷一》

看《算法与数据结构》,并行看《Java核心技术卷一》,并行刷《剑指offer》的题目(不用刷完)

1.3 《数据结构与算法分析——JAVA语言描述》刷leetcode

看《数据结构与算法分析——JAVA语言描述》,并行刷leetcode中前100题中的easy题目,不会的直接跳过。

1.4 《玩转算法面试》《算法设计与分析基础》

看《玩转算法面试》,并行看《算法设计与分析基础》,并行刷leetcode的题目前100题(hard不做),超过半小时想不出则看答案,看下别人的思路,自己的盲点,千万不要死抠!!

1.5《剑指offer》

刷完《剑指offer》《剑指offer》的题目

2 进阶(6个月):

2.1 刷leetcode的前300题

边理解,边手写《程序员代码面试指南:IT名企算法与数据结构题目最优解》所有题解(你会发现面试时基本上遇到的题目都在里面了,而且是最优解,就是面试官要的答案)

另外,图搜索可以看看这个1元钱的课程:http://www.julyedu.com/course/getDetail/59 ,老师讲的很好,很受启发。。动态规划也是1元:http://www.julyedu.com/course/getDetail/53

你可能感兴趣的:(java,算法)