这里开始学习 数据结构与算法相关知识,这个主要是基于 极客时间 大佬 覃超老师的 算法训练营 和 王争老师的 数据结构与算法之美。这里再次感谢两位老师,下面文章内容主要是自己作为复习使用的笔记,如果有笔误请见谅。很多内容都是出自两位老师课程ppt中的内容。
一、学习思路
在学习算法之前,先要明确学习的步骤。下面主要是 覃超老师 算法训练营 总结
精通一个领域
- Chunk it up 切碎知识点
- 庖丁解牛
- 脉络链接
- Deliberate Practicing 刻意练习
- Feedback 反馈
-
职业化运动
- 基本功是区别业余和职业化选手的根本
- 基础动作的分解训练和反复练习 ——> 最大的误区
Deliberate Practicing
- 刻意练习 —— 过遍数(五毒神掌)
-
练习缺陷、弱点地方
Feedback
- 即时反馈
- 主动型反馈(自己去找)
- 高手代码(Github,Leetcode,etc)
- 第一视角直播
- 被动式反馈(高手给你指点)
- code review
切题四件套
- Clarification
- Possible Solutions
- compare (time/space)
- optimal (加强)
- Coding(多写)
- Test cases
五毒神掌
第一遍
- 五分钟:读题 + 思考
- 直接看解法:多看几种,比较解法优劣
- 背诵、默写好的解法
第二遍
- 马上自己写 ——> Leetcode提交
- 多种解法比较、体会 ——> 优化!
第三遍
- 过了一天后,再重复做题
- 不同解法的熟练程度——>专项练习
第四遍
- 过了一周后:反复回来练习相同的题目
第五遍
- 面试前一周恢复性训练
小结
- 职业训练:拆分知识点、刻意练习、反馈
- 五步刷题法
- 做算法题最大的误区:只做一遍
数据结构与算法简单介绍:
数据结构
- 一维:
- 基础:数组 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 ——> literation
- 递归 Recursion (Divide & Conquer ,Backtrace)
所有高级算法或数据结构最后都会转换成以上三种
- 搜索 Search:深度优先搜索 Depth first search, 广度优先搜索 Breadth first search,A*,etc
-
动态规划 Dynamic Programming
-
二分查找 Binary Search
-
贪心 Greedy
-
数学 Math,几何 Geometry