第01课 | 数据结构与算法总览
如何有效学习数据结构与算法
线上课程
• 预习 — 基础知识自己预习和查看
• 课堂互动 — 跟着我一起思考、回答问题
• 课后作业 — 按照切题办法
期待效果
• 职业顶尖级别 - 对于算法数据结构的理解
• 一线互联网公司面试
• LeetCode 300+ 的积累
精通一个领域的方法
![]()
中文版译名: 《异类:不一样的成功启示录》
作者: 马尔科姆·格拉德威尔
Chunk it up 切碎知识点
分解数据结构和算法 :
数据结构
• 一维:
• 基础:数组 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
注意:了解每个数据结构的原理和代码框架
算法
-
If-else, switch —> branch(跳转语句,表示逻辑的切换)
-
for, while loop —> Iteration(循环,for loop 也可以写成 which)
-
递归 Recursion (Divide & Conquer分治, Backtrace回溯)
-
搜索 Search: 深度优先搜索 Depth first search, 广度优先搜索 Breadth first search, A*, etc
-
动态规划 Dynamic Programming
-
二分查找 Binary Search
-
贪心 Greedy
- 数学 Math , 几何 Geometry
注意:在头脑中回忆上面每种算法的思想和代码模板
前三点就类似于几何里面的公理一样,是算法最基础最基础的地方,是所有算法和数据结构的基石.任何的高级的算法数据结构,
到了最后都会转换成 if...else或者for…loop或者递归.最终的根本就是找到它的重复单元,基于它的重复单元,
你就可以泛化成下面的这些高级的数据结构
Homework:自己动手绘制一份数据结构和算法脑图
Deliberate Practicing 刻意练习
• 刻意练习 — 过遍数(五毒神掌)
• 练习缺陷、弱点地方
• 不舒服、不爽、枯燥
Feedback 反馈
• 即时反馈
• 主动型反馈(自己去找)
• 高手代码 (GitHub, LeetCode, etc.)
• 第一视角直播
• 被动式反馈(高手给你指点)
• code review
• 教练看你打,给你反馈
切题四件套
(是针对单个题目的)
注意:
首先对于单个题目的话,大家在写任何一个题目或者面试题之前,我希望大家养成这四步系统化的思考题目的方式,这里简称为"切题四件套".
"切题四件套"和下面的"五毒神掌"是个体和全部的关系.
• Clarification : 遇到任何一个题目,自己多看几遍题目,和面试官反复沟通这个题目,确保自己对这个题目的理解是正确的
• Possible solutions: 想所有可能的解法来解这个题目.不要只用想到的第一种解法去解,关键在于把所有可能的解法首先先过一遍,同时比较不同的方法它们的时间和空间复杂度,从中找出最优的一种解法(一般就是时间最快的一种解法).
• compare (time/space) 比较每一种解法的时间/空间复杂度
• optimal(加强) 最佳的
• Coding(多写): 写代码
• Test cases: 写完之后把测试样例能够列举几个.一方面能够测试自己的程序是否正确,另一方面也给面试官一个感觉,你是有始有终的,最后会给自己程序的正确性进行一个反复的测试.
五遍刷题法
又叫 "五毒神掌"
注意:任何一个题目的话,你要(至少)做五遍.
刷题第一遍
• 5分钟:读题 + 思考
• 直接看解法:注意!多解法,比较解法优劣(注意:算法本身是要理解和运用,而不是自己去发明和创造.所以这里在没有解题思路的情况下,直接看别人的解法并比较不同解法的优劣;如果有思路,就是上面的"切题四件套"了)
• 背诵、默写好的解法: 背诵和默写很重要,记忆之后一般百分百能理解,但是可能需要反复很多遍之后!
刷题第二遍
• 马上自己写 —> LeetCode 提交: 反复修改,直到是"通过"的状态.
• 多种解法比较、体会 —> 优化!

刷题第三遍
• 过了一天后,再重复做题
• 不同解法的熟练程度 —> 专项练习: 针对不熟的题目或者不熟的解法
刷题第四遍
• 过了一周:反复回来练习相同题目
• 不同解法的熟练程度 —> 专项练习: 针对不熟的题目或者不熟的解法
刷题第五遍
• 面试前一周恢复性训练
小结
-
职业训练: 拆分知识点、刻意练习、反馈
- 五遍刷题法(五毒神掌)
- 做算法题的最大误区:只做一遍
浙公网安备 33010602011771号