【九章算法班】 2021 版 百度云盘
-
第一章【直播】资深面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题
- 如何在算法面试中正确的沟通?
b.如何套出面试官要求的时间复杂度?
c.如何知道自己Hire or No Hire?
- 如何让面试官在面试中感觉你很牛逼?
b.什么是Good Coding Style,什么是Bad Coding Style
- 如何修炼Bug Free的能力
b.出现Bug以后如何快速Debug
- 如何做到刷100题顶过别人刷300题
- 2021算法面试考察范围与频率一览
- 2021新版课程特色一览
-
第二章【视频】FB面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题
1.如何在算法面试中正确的沟通?
a.如何确定自己的算法是正确的?
b.如何套出面试官要求的时间复杂度?
c.如何知道自己Hire or No Hire?
2.如何让面试官在面试中感觉你很牛逼?
a.为什么Coding Style很重要
b.什么是Good Coding Style,什么是Bad Coding Style
3.如何修炼Bug Free的能力
a.一个技巧教你避免99%的Bug
b.出现Bug以后如何快速Debug
4.如何做到刷100题顶过别人刷300题
a.算法面试精选100题2021版(免费福利)
5.2021算法面试考察范围与频率一览
6.2021新版课程特色一览
-
第三章【互动】真实面试案例分析(上)与面试评分标准
- 最长回文子串Longest Palindromic Substring
a.为什么不需要学Manacher's Algorithm
b.基于双指针的算法与背向双指针算法简介
c.有哪些Bad Coding Style容易踩,面试真实案例分析
d.基于动态规划的算法与区间型动态规划简介
- 面试评分标准
- 快速提高Coding Quality的十二个技巧
-
第四章【互动】真实面试案例分析(下)与80%求职者会踩坑的基础知识
- 字符串查找strStr
a.为什么不需要学KMP算法
b.Rabin-karp算法与哈希函数Hash Function
- 为什么我们不需要学习贪心法
- 三个你必须知道的语言知识
a.如何判断两个字符串是否相等
b.如何遍历字符串
c.null和""有什么区别
- 十个你必须掌握的字符串处理函数
-
第五章【互动】复杂度理论与双指针算法入门
- 四个算法的复杂度维度
a.时间复杂度
b.空间复杂度
c.编程复杂度
d.思维复杂度
- 时间复杂度是O(N)的算法有哪些
- 三种双指针题型
a.背向双指针
b.同向双指针
c.相向双指针
- Valid Palindrome && II
- Two Sum型双指针经典题
a.哈希表的做法
b.排序+双指针的做法
c.哈希表与双指针的比较
-
第六章【互动】必须熟练掌握的两个排序算法
- 两个必须熟练掌握的排序算法
a.快速排序算法
b.归并排序算法
- Quick Select快速选择算法
-
第七章【互动】时间复杂度为O(logN)的高频算法——二分法
- 时间复杂度的分析技巧——T函数推导法
- 通过时间复杂度倒推算法的技巧
- 递归是什么,如何实现二分
- 什么是堆空间(Heap Memory),什么是栈空间(Stack Memory)
- 什么是Stack Overflow,如何造成的,如何避免
-
第八章【互动】一个不会出现死循环的通用二分法模板
- 二分法的基本原理
- 通用模板
a.什么时候死循环
b.为什么能做到通用
- 使用二分法解决求第一个位置,求最后一个位置和求任意位置的二分问题
- 二分算法的判断条件
-
第九章【直播】高频算法之王——双指针算法之相向双指针
- 两数之和的十种变形题
a.数据结构设计
b.不同的二元组个数
c.两数之和小于等于
d.两数之和大于等于
e.三角形个数
f.两数之和最接近
g.三数之和
h.三数之和最接近
i.四数之和
j.K数之和
- 时间复杂度与循环层数的关系
- Partition型相向双指针
a.2-Part-Partitionvs3-Part-Partition
b.彩虹排序算法
c.通过移0的问题看相向双指针与同向双指针的区别
-
第十章【直播】简约而不简单——二分法学习的四重境界
- 第一重境界写出不会死循环二分法
- 第二重境界在排序的输入集上进行二分
- 第三重境界在未排序输入集上进行二分
- 第四重境界在结果集上进行二分
-
第十一章【视频】高频算法之王——双指针算法之相向双指针
- 两数之和的十种变形题
a.数据结构设计
b.不同的二元组个数
c.两数之和小于等于
d.两数之和大于等于
e.三角形个数
f.两数之和最接近
g.三数之和
h.三数之和最接近
i.四数之和
j.K数之和- 时间复杂度与循环层数的关系
- Partition型相向双指针
a.2-Part-Partitionvs3-Part-Partition
b.彩虹排序算法
c.通过移0的问题看相向双指针与同向双指针的区别
-
第十二章【视频】简约而不简单——二分法学习的四重境界
- 第一重境界写出不会死循环二分法
- 第二重境界在排序的输入集上进行二分
- 第三重境界在未排序输入集上进行二分
- 第四重境界在结果集上进行二分
-
第十三章【互动】队列知识点从易到难
- 队列及相关面试题
- Java中的Interface是什么
- 链表和数组实现队列的区别
- 循环队列的实现方法
-
第十四章【互动】宽度优先搜索与图论入门
- 宽度优先搜索的适用场景
- 宽度优先搜索的三种实现方法
a.两个队列的实现方法
b.DummyNode的实现方法
c.一个队列的实现方法
- 无向图和有向图的存储方法
-
第十五章【互动】用递归实现遍历法和分治法
- 递归Recursion,深搜DFS,回溯Backtracking的联系和区别
- 递归三要素是什么
- 通过二叉树学习DFS中的遍历法
- 什么是分治法,遍历法和分治法的区别
a.通过两道实战真题理解分治法和遍历法的区别
-
第十六章【互动】使用非递归实现二叉树的遍历
- 非递归版本的二叉树中序遍历
a.BST是什么
b.BST Iterator的两种实现方法
-
第十七章【直播】性价比之王——宽度优先搜索
- 连通块问题
a.DFS vs BFS在连通块问题上的优劣
b.劝分不劝合的编码理论
- 图的层级遍历与简单图最短路径问题
a.什么是简单图
b.复杂度最短路径有什么算法
c.最长路径用什么算法
d.什么是隐式图
e.通用的BFS模板
f.80%的人都会写错的BFS写法
- 拓扑排序
a.DFS vs BFS在拓扑排序上的优劣
b.拓扑排序的五个考点
i.问有没有拓扑排序
ii.求任意一个拓扑排序
iii.求最小的拓扑排序
iv.求拓扑排序是否唯一
-
第十八章【直播】解决99%二叉树问题的算法——分治法
- 用分治法解决二叉树求值求路径的问题
a.理解什么是搜索中的回溯
- 用分治法解决二叉树形态变换的问题
a.全局变量在代码中的危害
-
第十九章【视频】性价比之王——宽度优先搜索
- 连通块问题
b.劝分不劝合的编码理论
- 图的层级遍历与简单图最短路径问题
b.复杂度最短路径有什么算法
c.最长路径用什么算法d.什么是隐式图
e.通用的BFS模板f.80%的人都会写错的BFS写法
- 拓扑排序
b.拓扑排序的五个考点
i.问有没有拓扑排序 ii.求任意一个拓扑排序 iii.求最小的拓扑排序 iv.求拓扑排序是否唯一 -
第二十章【视频】解决99%二叉树问题的算法——分治法
- 用分治法解决二叉树求值求路径的问题
a.理解什么是搜索中的回溯
- 用分治法解决二叉树形态变换的问题
-
第二十一章【互动】组合类DFS
- 组合类搜索的隐式图模型
- 组合类搜索的时间复杂度和适用条件
- 如何对搜索结果进行去重
a.选代表vs哈希表
-
第二十二章【互动】排列类DFS
- 排列类搜索的隐式图模型
- 排列类搜索的时间复杂度和适用条件
- 通过排列类搜索看搜索与多重循环的区别
- 著名的NP问题:TSP问题(旅行商问题)
a.DFS的解法
b.状态压缩型动态规划
c.随机化算法
-
第二十三章【互动】哈希表的原理
- HashMap和HashSet的联系和区别
- 哈希表Hash Table的基本原理
- 什么是哈希函数Hash Function
- 如何解决冲突Collision
a.开散列Open Hash vs 闭散列Closed Hash
- 哈希表扩容问题
-
第二十四章【互动】堆的基本原理
- Priority Queue和堆的联系和区别
- 堆的基本原理
- 堆的基本操作Sift Up和Sift Down
- 堆的增删查改
- 堆的初始化Heapify
- 堆排序
-
第二十五章【直播】刷人利器——深度优先搜索
- 排列组合类搜索
a.两种组合类DFS的实现方法
b.使用组合类DFS算法解决K数之和问题
c.DFS的框架模板
- 矩阵上的DFS
- 如何解决求所有最短路线的问题
-
第二十六章【直播】高频数据结构——哈希表与堆
- 数据结构设计题的考点
- 数据结构设计题的时间复杂度计算方式
- 在线算法vs离线算法
- 堆Heap的实战真题
- 高级数据结构的Cheat Sheet
-
第二十七章【视频】刷人利器——深度优先搜索
- 排列组合类搜索
a.两种组合类DFS的实现方法
b.使用组合类DFS算法解决K数之和问题
c.DFS的框架模板
- 矩阵上的DFS
- 如何解决求所有最短路线的问题
-
第二十八章【视频】高频数据结构——哈希表与堆
- 数据结构设计题的考点
- 数据结构设计题的时间复杂度计算方式
- 在线算法vs离线算法
- 堆Heap的实战真题
- 高级数据结构的Cheat Sheet
-
第二十九章【互动】从搜索到动规——记忆化搜索入门
- 什么时候可以使用记忆化搜索
- DFS和记忆化搜索的区别
- 如何用三行代码让DFS变成记忆化搜索
- 用记忆化搜索解决博弈型动态规划
- 记忆化搜索的缺陷
-
第三十章【互动】动态规划入门与动规四要素
- 动态规划DP与记忆化搜索的关系
- 多重循环与记忆化搜索实现动态规划的区别
- 什么时候使用动态规划
a.动态规划四要素是什么
- 自底向上的动态规划
- 自顶向下的动态规划
-
第三十一章【互动】动态规划使用场景与题型分类
- 动态规划算法的使用场景
- 动态规划题型一览
- 坐标型动态规划
-
第三十二章【互动】背包型动态规划入门
- 01背包
- 带价值的背包
- 多重背包
-
第三十三章【直播】让面试官眼前一亮——记忆化搜索
- 三种适用动态规划的场景
- 三种不适用动态规划的场景
- 用记忆化搜索解决字符串相关的DP问题
-
第三十四章【直播】最难的算法——动态规划
- 动态规划的解题步骤
- 动态规划的空间优化技巧——滚动数组
- 坐标型动态规划的分支——接龙型动态规划
- 通过经典DP题LIS看动态规划如何记录具体方案
- 上下左右都可以走的矩阵如何进行动态规划
-
第三十五章【视频】让面试官眼前一亮——记忆化搜索
- 三种适用动态规划的场景
- 三种不适用动态规划的场景
- 用记忆化搜索解决字符串相关的DP问题
-
第三十六章【视频】最难的算法——动态规划
- 动态规划的解题步骤
- 动态规划的空间优化技巧——滚动数组
- 坐标型动态规划的分支——接龙型动态规划
- 通过经典DP题LIS看动态规划如何记录具体方案
- 上下左右都可以走的矩阵如何进行动态规划
-
第三十七章【互动】双指针算法之同向双指针(上)
- Two Sum的第十一种变形题——两数之差
- 全零子串问题
- 数组去重问题
-
第三十八章【互动】双指针算法之同向双指针(下)
- 数组和字符串上的同向双指针
a.滑动窗口求和
b.K次替换后最长的重复字符子串
- 快慢指针算法
a.链表求交、链表求环
b.链表中位点
-
第三十九章【互动】二分法实战练习
- 排序输入集:排序矩阵找数问题
- 未排序输入集:最小的包含所有连通01块的矩阵
- 结果集二分:抄书问题
-
第四十章【互动】时间复杂度低于O(N)的算法
- 比O(N)小的算法 -O(LogN)
a.快速幂算法
b.辗转相除法
c.两个排序数组的中位数
- O(√N)的算法
a.分解质因数
b.分块检索法
-
第四十一章【互动】使用宽度优先搜索找所有方案
- 使用BFS求所有方案类问题
- 使用BFS序列化二叉树
a.什么是序列化与反序列化
-
第四十二章【互动】双向宽度优先搜索算法
- 双向宽度优先搜索算法
a.双向宽度优先搜索到底优化了多少
b.如何优雅的实现双向宽度优先搜索
-
第四十三章【互动】后序遍历非递归与Morris算法
- 非递归实现后序遍历
- Morris算法
-
第四十四章【互动】二叉查找树的增删查改
- BST 的增删查改
-
第四十五章【互动】非递归的方式实现排列和组合类DFS
- 使用求下一个排列的算法实现非递归
- 更通用的非递归实现方法
-
第四十六章【互动】DFS经典题精讲
- N皇后问题及程序结构的艺术
- 数独及搜索顺序的优化算法
-
第四十七章【互动】数据结构设计类问题
- 最小栈
- 最大栈
- 两个栈实现队列
- 两个队列实现栈
-
第四十八章【互动】外排序算法与数组合并类问题
- 外排序
- 三种K路归并算法
- 数组合并的相关问题
-
第四十九章【互动】区间型动态规划入门
- 区间型动态规划的题目特点
- 区间型动态规划的循环方式
- 三个例题入门区间动态规划
-
第五十章【互动】匹配型动态规划入门
- 匹配型动态规划的题目特点
- 匹配型动态规划的代码实现
- 三个例题入门匹配型动规
-
第五十一章【互动】划分型动态规划入门
- 划分型动态规划的题目特点
- 划分型动态规划的代码实现
- 三个例题入门划分型动规
-
第五十二章【互动】接龙型动态规划的二分解法
- 接龙型动态规划的题目特点
- 接龙型动态规划的代码实现
- 最长上升子序列(LIS)的二分解法
- 三个例题吃透接龙型动态规划