第01课丨01如何有效学习数据结构与算法
1 Chunk it up 切碎知识点
这一步相当于庖丁解牛,脉络连接。将一块大的知识点进行切割整合。
1.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
1.2 分解算法
算法的底层是三部分:逻辑判断、循环、递归
• If-else, switch —> branch
• for, while loop —> Iteration
• 递归 Recursion (Divide & Conquer, Backtrace)
衍生出其他
• 搜索 Search: 深度优先搜索 Depth fifirst search, 广度优先搜索 Breadth fifirst search, A*, etc
• 动态规划 Dynamic Programming
• 二分查找 Binary Search
• 贪心 Greedy
• 数学 Math , 几何 Geometry
2 Deliberate Practicing
2.1 刻意练习
基础动作的分解训练和反复练习 —> 最大的误区:题目只练习一遍
Deliberate Practicing
• 刻意练习 — 过遍数
• 练习缺陷、弱点地方
• 这个过程会感到不舒服、不爽、枯燥
• 生活中例子:乒乓球、台球、游戏等等
2.2 练习方法
2.2.1 单个提:切题四件套
-
Clarification:把题目意思弄懂
-
Possible solutions:想出不止一个解法
• compare (time/space):比较所有方法时间复杂度和空间复杂度
• optimal(加强)
-
Coding(多写)
-
Test cases:多个样例测试
2.2.2 五步刷题法
写:两步
温习:两步
复习:一步
以上步骤共五步
刷题第一遍
• 5分钟:读题 + 思考
• 直接看解法:注意!多解法,比较解法优劣
• 背诵、默写好的解法
刷题第二遍
• 马上自己写 —> LeetCode 提交
• 多种解法比较、体会 —> 优化!
刷题第三遍
• 过了一天后,再重复做题
• 不同解法的熟练程度 —> 专项练习
刷题第四遍
• 过了一周:反复回来练习相同题目
刷题第五遍
• 面试前一周恢复性训练
3 Feedback 反馈
3.1 即时反馈
• 主动型反馈(自己去研究高手写的优美的代码)
• 高手代码 (GitHub, LeetCode, etc.)
3.2 被动式反馈
找一个高手给你指点

浙公网安备 33010602011771号