Loading

第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 被动式反馈

找一个高手给你指点

posted @ 2021-12-29 11:43  maju  阅读(105)  评论(0)    收藏  举报