01 - 数据结构与算法总览
数据结构与算法总览
学习方法
- Chunk it up 切碎知识点
- Deliberate Practice 刻意练习
- Feedback 反馈
数据结构
一维数据结构
-
基础:数组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
特殊数据结构
- 位运算Bitwish,布隆过滤器BloonFitter,缓存LRU Cache
算法
三点基本
是所有算法和数据结构的基石,目前我们所用的算法并不包含任何智能成分,化繁为简后,它的根本就是 找到它的重复单元,基于重复单元,可泛化为高级数据结构,,而高级的算法数据结构到最后都会转化为跳转/循环/递归
-
跳转
branch------if-else,switch -
循环
lteration------for-loop,while-loop,which -
递归
Recursion------Divide&conquer,Backtrace
五点高级 -
搜索Search:
深度优先搜索Depth first search,广度优先搜索Breadth first search,启发式搜索A*,etc -
动态规则Dynamic Programming
-
二分查找Binary search
-
贪心算法Greedy,排序
-
数学Math,几何Geometry
基本功的训练
基础动作的分解训练和反复练习
-
刻意练习 及时反馈 刷题技巧
-##切题——四步系统的思考方式
-
Clarification,Posssible solutions,Coding,Test cases
-##刷题——五遍刷题法
-
1 读题+思考(5~15min)——看解法(/自己做)比较多种解法的优劣——背诵默写好的解法
-
2 自己写——LeetCode提交——反复修改debug,尝试多重解法——进行优化
-
3 过24h后及时重复做题,不同解法的熟练程度,专项练习
-
4 一周后反复回来刷相同的题
-
5 面试前一周恢复性训练