【九章算法班】 2021 版 百度云盘

  • 第一章【直播】资深面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题

    • 如何在算法面试中正确的沟通?
    a.如何确定自己的算法是正确的?

    b.如何套出面试官要求的时间复杂度?

    c.如何知道自己Hire or No Hire?

    • 如何让面试官在面试中感觉你很牛逼?
    a.为什么Coding Style很重要

    b.什么是Good Coding Style,什么是Bad Coding Style

    • 如何修炼Bug Free的能力
    a.一个技巧教你避免99%的Bug

    b.出现Bug以后如何快速Debug

    • 如何做到刷100题顶过别人刷300题
    a.算法面试精选100题2021版(免费福利)
    • 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.全局变量在代码中的危害

  • 第十九章【视频】性价比之王——宽度优先搜索

    • 连通块问题
    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.理解什么是搜索中的回溯

    • 用分治法解决二叉树形态变换的问题
  • 第二十一章【互动】组合类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)的二分解法
    • 三个例题吃透接龙型动态规划