如何系统的学习算法和数据结构
线上课程
- 预习 - 基础知识自己预习和查看
- 课堂互动 - 跟着我一起思考、回答问题
- 课后作业 - 按照切题方法
期待效果
- 职业顶尖级别 - 对于算法和数据结构的理解
- 一线互联网公司面试
- LeetCode 300+ 的积累
《Outliers》- 《异类:不一样的成功启示录》
- Chunk it up 切碎知识点
- Deliberate Practicing 刻意练习
- Feedback 反馈
Chunk it up
- 庖丁解牛(将整个数据结构和算法进行拆解)
- 脉络连接(拆解出来的每一块要与其他的有关联)
数据结构
- 一维
- 基础:数组 array (string),链表 linked list
- 高级:栈 stack,队列 queue,双端队列 deque,集合 set,映射 map ( hash or map ),etc
- 二维
- 基础:树 tree,图 graph
- 高级:二叉搜索树 binary search tree ( red-black tree,AVL ),堆 heap,并查集 disjoint set,字典树 Trie,etc
- 特殊(工程中特殊的场景)
- 位运算 Bitwise,布隆过滤器 BloomFilter
- LRU Cache
算法
- 三大基石:任何的数据结构和算法,最后都会转化为下面三者之一。算法的根本就是找到它的重复单元。
- if-else,switch -> branch
- for,while loop -> Iteration
- 递归 Recursion(Divide & Conquer,Backtrace)
- 高级算法
- 搜索 Search:深度优先搜索 Depth first search,广度优先搜索 Breadth first,A*,etc
- 动态规划 Dynamic Programming
- 二分查找 Binary Search:对于一个有序的数组,很快地找到你要的目标节点
- 贪心 Greedy
- 数学 Math,几何 Geometry
注意:在头脑中回忆上面每种算法的思想和代码模板
**
Deliberate Practicing
- 基本功:是区别业余和职业选手的根本
- 刻意练习:过遍数(五遍刷题)
- 练习缺陷、弱点的地方(不舒服、不爽、枯燥证明你在成长)
Feedback
- 即时反馈
- 主动型反馈(自己去找)
- 高手代码(Github,LeetCode,etc.)
- 第一视角直播
- 被动式反馈(高手给你指点)
刷题技巧
切题四件套(单个题目)
- Clarification(反复确认题目,与你理解的是相同的)
- Possible solutions(想所有可能的解法,来解这个题目**)**
- compare(time/space)
- optimal(加强)
- Coding
- Test cases
无毒神掌(五遍刷题法)
第一遍
- 5分钟:读题 + 思考(基础薄弱,最多 10 - 15 分钟)
- 直接看解法:注意!多解法,比较解法优劣(上一步没有思路的话)
- 背诵、默写好的解法
第二遍
- 马上自己写(闭卷考试)-> leetcode 提交
- 多种解法比较、体会 -> 优化!
第三遍
- 过了一天后,再重复做题
- 不同解法的熟练程度 -> 专项练习
第四遍
第五周
- 面试前一周,恢复性训练(自己看时间,提前两周、半周都可以)
小结
- 职业训练:拆分知识点、刻意练习、反馈
- 五步刷题法(无毒神掌)
- 做算法题的最大误区:只做一遍