为什么要掌握算法与数据结构
- 编程的内功修炼
- 去国内一流互联网公司的必要条件
- 硅谷互联网公司面试更是要求当场写算法题目
- 算法和数据结构是有趣且实用的
如何有效学习和训练算法和数据结构
精通一个领域
- Chunk it up(切碎知识点)
- Deliberate practicing(刻意练习)
- 刻意练习
- 练习缺陷、不舒服、弱点地方
- 不爽、枯燥
- Feedback(获得反馈)
- 即时反馈
- 主动型反馈(自己去找)
- 高手代码(GitHub, LeetCode, etc.)
- 第一视角直播
- 被动式反馈(高手给你指点)
- code review
- 教练看你打,给你反馈
--Data Structure--
Array
Stack/Queue
PriorityQueue
LinkedList
Queue/Priority queue
Stack
Tree/Binary Search Tree
HashTable
Disjoin Set
Trie
BloomFilter
LRU Cache
--Algorithm--
Greedy
Recursion/Backtrace
Traversal
Breadth-first/Depth-first search
Didvide and Conquer
Dynamic ProgrammingBinary Search
Graph
--System Design--
SYstem architecture overview
Design+scalability+flexibility
Typical system design questions
复杂度
O(1): 常数复杂度
O(logn): 对数复杂度
O(n): 线性时间复杂度
O(n^2): N平方复杂度
O(n^3): N立方复杂度
O(2^n): 指数复杂度
O(n!): 阶乘复杂度
切题四件套
- Clarification
- Possible solutions
- compare(time/space)
- optional(加强)
- Coding(多写)
- Test cases
LeetCode
- 做题
- 时间复杂度
- XCode
Feedback
- Solutions from LeetCode
- Discussion Panel in LeetCode
网友评论