算法与数据结构 - 总览
# 1. 数据结构
一维
- 基础:数组 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
# 2. 算法
基础
- 条件判断:if-else, switch -> branch
- 迭代循环:for, while loop -> iteration
- 递归:Recursion(Divide & Conquer, Backtrace)
高级
- 搜索 Search:深度优先搜索 Depth first search,广度优先搜索 Breadth first search,A*,etc
- 动态规划 Dynamic Programming
- 二分查找 Binary Search
- 贪心 Greedy
- 数学 Math,几何 Geometry
# 3. 方法论
职业训练
- 拆分知识点
- 刻意练习
- 反馈
切题四件套
- Clarification 明确题目
- Possible solutions 寻求多种解法,找出最优解
- compare(time/space)比较
- optimal 优化
- Coding 刻意练习
- Test cases 测试用例,有始有终
五毒神掌
第一遍
- 5分钟:读题 + 思考
- 直接看解法:注意!多解法,比较解法优劣
- 背诵、默写好的解法
第二遍
- 马上自己写 -> LeetCode提交
- 多种解法比较、体会 -> 优化!
第三遍
- 过一天后,再重复做题
- 不同解法的熟练程度 -> 专项练习
第四遍
- 过了一周,反复回来练习相同题目
第五遍
- 面试前一周恢复性训练
第三遍的时候就可以看一看leetcode国际站的Discuss中Most Vote前三回答,学习先进思路,会有很大帮助
# 4. 时间和空间复杂性
时间复杂度: Big O notation
- O(1): Constant Complexity 常数
- O(log n): Logarithmic Complexity 对数
- O(n): Linear Complexity 线性
- O(n^2): N square Complexity 平方
- O(n^3): N square Complexity 立方
- O(2^n): Exponential Growth 指数
- O(n!): Factorial 阶乘
注意: 只看最高复杂度的运算
复杂度分析方式:Master Theorem 主定理
# 5. 解决思想
核心思想: 升维 和 空间换时间
解题思路
- 最近子问题
上次更新: 2021/03/25, 04:03:00