这个仓库记录一下在LeetCode上的刷题过程, 算法和数据结构的知识点,刷题的一些知识总结等。 本次刷题和整理按照知识点由简单到困难的顺序进行, 并且是分知识点进行刷题, 这样做的好处是可以把知识点切碎 然后通过刻意练习的方式把每一块都学习好。
- 数组、链表和跳表
- 栈和队列(优先队列, 双端队列)
- 哈希表、映射和集合
- 树、二叉树、二叉搜索树
- 递归、回溯和分治
- 深度优先和广度优先
- 贪心算法
- 二分查找
- 动态规划和高级动态规划
- 字典树和并查集
- 高级搜索
- 红黑树和AVL树
- 位运算
- 布隆过滤和LRU缓存
- 排序算法
- 字符串算法
- 大串讲
- 其他题目和总结
-
Chunk it up 把知识点切碎
庖丁解牛、脉络连接(通过思维导图的方式把知识点连接起来)
-
Deliberate Practicing 刻意练习
-
Feedback反馈
- 一维:
- 基础: 数组Array, string, 链表Linked list
- 高级: 栈stack, 队列queue, 双端队列deque, 集合set, 映射map(hash)
- 二维:
- 基础: 树Tree, 图graph
- 高级: 二级搜索树binary search tree(red-blace tree, AVL), 堆heap, 并查集disjoint set, 字典树Trie
- 特殊:
- 位运算 Bitwise, 布隆过滤器BloomFilter
- LRU Cache
注意, 在后面的学习中要了解每个数据结构的原理和代码框架, 这个网站会有三张思维导图, 等把训练营学完了, 也要亲自画一遍。https://blog.csdn.net/leacock1991/article/details/103333312
- if-else, switch—>branch
- for, while loop —> Iteration
- 递归Recursion(Divide $ Conquer, Backtrace)
- 搜索Search: 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*
- 动态规划 Dynamic Programming
- 二分查找 Binary Search
- 贪心 Greedy
- 数学 Math, 几何 Geometry
注意: 在头脑中回忆上面每种算法的思想和代码模板
切题四件套:
-
Clearification(弄清楚题目)
-
Possible solutions(important)
想可能的解法, 这个非常重要, 一定要把所有的解题方法先过一遍, 同时分析它们的时间和空间复杂度, 然后选择一个最优的
-
Coding(多写)
-
Test cases 自己想几个测试用例, 找自己程序的漏洞, 把问题想全面一些
五步刷题法(五毒神掌):
-
刷题第一遍:
- 五分钟: 读题+思考
- 如果不会,直接看解法: 注意多种解法, 比较解法优劣
- 背诵, 默写好的解法(这个很重要), 把好的几个解法默写背诵
-
刷题第二遍:
-
马上自己写 —> 并提交查看结果
把所有好的解法都尝试一遍, 并且必须写到LeetCode上全部通过
-
多种解法比较, 看执行用时和内存消耗, 体会和尝试优化算法
-
-
刷题第三遍
- 过了一天后, 再重复做题
- 不同解法的熟练程度 —> 专项练习
-
刷题第四遍: 过了一周, 反复回来练习相同的
这些可以帮助我们速查速学, 快速掌握一些刷题的技巧, 思想和经验