总览
数据结构
- 一维数据结构
- 基础:数组 array(string)、链表 linked list
- 高级:栈 stack、队列queue、双端队列 deque、集合set、映射 map(hash or map)
- 二维数据结构
- 基础:树 tree、图 graph
- 高级:二叉搜索树 binary search tree(red-black tree、AVL)、堆 heap、并查集 disjoint set、字典树 Trie
特殊数据结构
if-else
- for loop、 while loop
- 递归
找重复单元 ===> 泛化
- 搜索: 深度优先搜索、广度优先搜索、A*
- 动态规划
- 二分查找(有序数组查找元素)
- 贪心算法
- 数学、几何操作
刻意练习
- 刻意练习-过遍数(五毒神掌)
- 练习缺陷、弱点的地方
- 不爽、不舒服、枯燥
反馈
- 即时反馈
- 主动型反馈(自己去找)
- 高手的代码(Github、LeetCode etc)
- 第一视角直播
- 被动式反馈(高手指导)
刷题技巧
- 切题四件套:
- 和面试官反复沟通、确认理解题目
- Possible solutions:
- compare 把所有可能的解决方法过一边,对比时间/空间复杂度
- optimal 加强
- Coding
- Test Case
- 五毒神掌
- 第一遍
- 5分钟:读题+思考
- 直接看解法:注意:多解法,比较解法优劣
- 背诵和默写好解法
- 第二遍(马上)
- 马上自己写
- 多种解法比较、体会-> 优化
- 第三遍(过了24小时之后, 忘记的专项练习)
- 第四遍(过了一周之后,忘记的专项练习)
- 第五遍(面试提前一周)
环境配置、编码技巧
Google
Iterm
VScode
LeetCode
中文站:https://leetcode-cn.com/
国际站:https://leetcode.com/
五毒神掌(五遍刷题法)
切题四件套:确认所有的问题和疑惑、所有方法/比较时间复杂度、找出最优、写
指法练习 Top Tip for IDE
自顶向下的编码方式
高层次(主干逻辑)
复杂度分析
时间复杂度
分类
主定理 Master Theorem
空间复杂度
- 数组的长度
- 递归的深度