《算法训练营》课堂笔记 & 习题
第01课丨数据结构与算法总览
参考链接
课后作业
绘制自己的数据结构和算法脑图
用脑图的方式把知识的脉络串联起来,不管对于学习新知识还是巩固已有知识,都是一种很好的学习方式。同学们可以将目前自己所掌握的数据结构和算法知识绘制成脑图,在绘制过程中可以查阅资料,补充目前掌握欠缺的部分,找到自己薄弱的地方。后面再通过课程的学习和刻意练习,动态地将自己绘制的脑图逐步补充、完善,从而达到真正的融会贯通。
脑图绘制工具不限,同学们需要按时将作业提交到班级 GitHub 中,具体作业提交方式戳此查看。
第02课丨训练准备和复杂度分析
参考链接
- Windows Microsoft New Terminal
- VS Code Themes
- 教你打造一款颜值逆天的 VS Code
- 炫酷的 VS Code 毛玻璃效果
- 自顶向下的编程方式
- 自顶向下编程的 LeetCode 例题
参考链接
第03课丨数组、链表、跳表
参考链接
- Java 源码分析(ArrayList)
- Linked List 的标准实现代码
- Linked List 示例代码
- Java 源码分析(LinkedList)
- LRU Cache - Linked list: LRU 缓存机制
- Redis - Skip List:跳跃表、为啥 Redis 使用跳表(Skip List)而不是使用 Red-Black?
Array 实战题目
Linked List 实战题目
课后作业
第04课丨栈、队列、优先队列、双端队列
参考链接
预习题目
实战题目
课后作业
- 用 add first 或 add last 这套新的 API 改写 Deque 的代码
- 分析 Queue 和 Priority Queue 的源码
- 42. 接雨水
- 641. 设计循环双端队列
说明:改写代码和分析源码这两项作业,同学们需要在第 1 周的学习总结中完成。如果不熟悉 Java 语言,这两项作业可选做。
第05课丨哈希表、映射、集合
参考链接
课后作业
写一个关于 HashMap 的小总结。
说明:对于不熟悉 Java 语言的同学,此项作业可选做。
实战题目 / 课后作业
参考链接
第06课丨树、二叉树、二叉搜索树
参考链接
思考题
树的面试题解法一般都是递归,为什么?
说明:同学们可以将自己的思考写在课程下方的留言区一起讨论,也可以写在第 2 周的学习总结中。
参考链接
实战题目 / 课后作业
第07课丨泛型递归、树的递归
参考链接
实战题目
每日一课
课后作业
第08课丨分治、回溯
参考链接
预习题目
参考链接
实战题目
- 17. 电话号码的字母组合
- 51. N皇后
- 169. 多数元素 (简单、但是高频)
第09课丨深度优先搜索和广度优先搜索
参考链接
实战题目
课后作业
第10课丨贪心算法
参考链接
课后作业
第11课丨二分查找
参考链接
实战题目
课后作业
使用二分查找,寻找一个半有序数组 [4, 5, 6, 7, 0, 1, 2] 中间无序的地方
说明:同学们可以将自己的思路、代码写在第 3 周的学习总结中
第12课丨动态规划
参考链接
参考链接
实战题目
实战题目
- 121. 买卖股票的最佳时机
- 121. 买卖股票的最佳时机
- 122. 买卖股票的最佳时机 II
- 123. 买卖股票的最佳时机 III
- 188. 买卖股票的最佳时机 IV
- 198. 打家劫舍
- 213. 打家劫舍 II
- 309. 最佳买卖股票时机含冷冻期
- 714. 买卖股票的最佳时机含手续费
高级 DP 实战题目
注意:请大家先消化前面的实战题目,高级 DP 的方法和题解会在课程后面解锁。
课后作业
- 32. 最长有效括号
- 64. 最小路径和
- 72. 编辑距离
- 76. 最小覆盖子串Copy
- 91. 解码方法
- 221. 最大正方形
- 312. 戳气球
- 363. 矩形区域不超过 K 的最大数值和
- 403. 青蛙过河
- 410. 分割数组的最大值
- 552. 学生出勤记录 II
- 621. 任务调度器
- 647. 回文子串
第13课丨字典树和并查集
参考链接
实战题目 / 课后作业
分析单词搜索 2 用 Tire 树方式实现的时间复杂度,请同学们提交在第 6 周的学习总结中。
参考链接
实战题目 / 课后作业
第14课丨高级搜索
参考链接
实战题目
实战题目
课后作业
总结双向 BFS 代码模版,请同学们提交在第 6 周学习总结中。
参考链接
实战题目
第15课丨红黑树和AVL树
参考链接
第16课丨位运算
参考链接
参考链接
实战题目 / 课后作业
第17课丨布隆过滤器和LRU缓存
参考链接
- 布隆过滤器的原理和实现
- 使用布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重
- 布隆过滤器 Python 代码示例
- 布隆过滤器 Python 实现示例
- 高性能布隆过滤器 Python 实现示例
- 布隆过滤器 Java 实现示例 1
- 布隆过滤器 Java 实现示例 2
参考链接
实战题目 / 课后作业
第18课丨排序算法
参考链接
课后作业
用自己熟悉的编程语言,手写各种初级排序代码,提交到第 7 周学习总结中。
参考链接
实战题目 / 课后作业
第19课丨高级动态规划
参考链接
课后作业
在第 8 周学习总结中,写出不同路径 2 这道题目的状态转移方程。
参考链接
课后作业
第20课丨字符串算法
参考链接
字符串基础问题
字符串操作问题
异位词问题
回文串问题
最长子串、子序列问题
字符串 + DP 问题
参考链接
课后作业
- 5. 最长回文子串
- 8. 字符串转换整数 (atoi)
- 32. 最长有效括号
- 44. 通配符匹配
- 115. 不同的子序列
- 151. 翻转字符串里的单词
- 205. 同构字符串
- 387. 字符串中的第一个唯一字符
- 438. 找到字符串中所有字母异位词
- 541. 反转字符串 II
- 557. 反转字符串中的单词 III
- 680. 验证回文字符串 Ⅱ
- 917. 仅仅反转字母
感谢您的阅读,本文由 董宗磊的博客 版权所有。如若转载,请注明出处:董宗磊的博客(https://dongzl.github.io/2020/06/04/29-Algorithm-Training-Note/)