文章目录
学习笔记
- chunk it up 切碎知识点
- practice it 刻意练习
- feedback 反馈: 分为主动反馈和被动反馈
从大到小掌握,
将任何领域学习的治理学习抽象成一个语法树,了解最基本的枝干,然后将具体的知识点再挂到这些枝干上面,在学习的过程中,每学习一个知识点,都要知道他应该被挂到哪个枝干上面。
数据结构分类,要对着脑图讲出特点
- 一维数据结构
- 基础型:数组,链表
- 高级:stack,queue,dequeue,set,map
- 二维数据结构
- 基础: tree,graph
- 高级:binary search tree, red-black tree,AVL, heap(堆),并查集(disjoint set), 字典树Trie,
- 特殊的数据结构
- 位运算Bitwise,布隆过滤器BloomFilter
- LRU Cache
算法分类
- 基础分类
- if-else,switch-branch
- for loop
- recursion 递归
- 高级分类
- 搜索search: dfs(deep first search),bfs(bread first search),
A*
, - 动态规划 Dynamic Programming
- 二分查找 Binary Search
- 贪心算法 Greedy
- 数学Math,几何Geomety
- 搜索search: dfs(deep first search),bfs(bread first search),
在头脑中熟记没种算法的思想和代码模板,这个要TODO来看
根本是找到重复单元
一遍肯定不够,要多次进行专项练习
- 五毒神掌
- 练习缺陷,弱点的地方
切题四件套
- clarification 确认问题边界
- possible solutions 想到的所有的可能的想法过一遍,比较对应的时间,空间复杂度,找出最优的方法
- 编写代码
- 进行测试用例
五毒神掌,一个题目做5遍
- 第一遍,5分钟思考读题, 没有思路的话, 直接看解法(比较不同解法的优劣), 背诵和默写所有的解法,参考国际站来看
- 立刻写代码,知道leetcode提交直到通过
- 24小时之后,重新做一遍,如果有不熟练的进行专项练习
- 一周之后重新练习,如果有不熟练的进行专项练习
- 面试前一周进行练习学习
代码的效率的提升方式
- 提升数据维度
- 空间换时间
技巧
- 一定要先把题目整清楚,问问边界case,数据规模等问题,可以更好的理解这个问题,有时候上来就会跳到第二个环节,冷静
- 想想方案,没有明确思路的话,可以试试穷举,迭代,借用数组,栈,队列,双端队列,优先队列,大顶堆,小顶堆这些是不是可以使问题变得简化
- 不要最求最好的思路,看看能否把问题稍微简化一些处理,就是逻辑上简单一些,可能时间复杂度更高的这种情况容器装水,这个就是一个经典的例子,没有必要非要精简到一定的程度
。 - 考虑初始的数据模型,初始条件
- 做完后简单聊一下时间复杂度