21周掌握初阶算法到高阶算法面试题,适合不同基础,不同专业的系统性面试算法课程,123课时和600+练习题,层次递进的破解面试算法。助力求职者攻克大厂面试而设计的课程。课程由硅谷顶尖IT工程师亲自操刀。聚焦2025年最新面试趋势,帮助学员掌握核心算法知识,提升解题能力,让学员能够在FLAG、BATJ等大厂面试中脱颖而出。

### 🚀课程概述 九章算法班专业版2025是一门专为提升算法能力,助力求职者攻克大厂面试而设计的课程。课程由硅谷顶尖IT工程师亲自操刀。聚焦2025年最新面试趋势,帮助学员掌握核心算法知识,提升解题能力,让学员能够在FLAG、BATJ等大厂面试中脱颖而出。 ### 📚课程内容 - **57个核心高频考点精讲**:课程在8周时间内,深入讲解57个核心高频算法考点。涵盖数据结构、排序算法、搜索算法、动态规划等多个重要领域。例如,对于动态规划,会详细讲解背包问题、最长公共子序列等经典题型的解法。 - **大厂面试题型实战**:通过分析历年大厂面试真题,总结出9招击破大厂算法面试的技巧。提供大量与大厂面试难度相当的练习题,如以下是一个经典的二叉树遍历代码示例(Python): ```python # 定义二叉树节点类 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right # 前序遍历 def preorderTraversal(root): result = [] if root: result.append(root.val) result.extend(preorderTraversal(root.left)) result.extend(preorderTraversal(root.right)) return result # 中序遍历 def inorderTraversal(root): result = [] if root: result.extend(inorderTraversal(root.left)) result.append(root.val) result.extend(inorderTraversal(root.right)) return result # 后序遍历 def postorderTraversal(root): result = [] if root: result.extend(postorderTraversal(root.left)) result.extend(postorderTraversal(root.right)) result.append(root.val) return result ``` - **系统设计知识补充**:除了算法,还会涉及部分系统设计知识点,让学员具备更全面的技术能力,更好地应对大厂综合面试。帮助学员快速掌握16大系统设计知识点与面试考点,如分布式系统架构、缓存设计等。 ### 💎课程特色 - **直播+互动教学模式**:课程包含50课时视频课+互动课,通过直播实时讲解,学员可以与老师实时互动,及时解决疑问。互动课上,老师会带领学员一起敲代码,加深对知识点的理解。 - **资深讲师团队**:由九章金牌讲师授课,他们均为北美大厂在职工程师,拥有丰富的面试者和面试官经验。总面试次数超500+,面试人数众多,精通面试实战、职业规划晋升等,已帮助1000+学员拿到FLAG级别offer。 - **定制化服务**:提供特色1V1服务,根据学员的基础和求职目标,定制专属求职培养计划,帮助学员有针对性地提升。 ### 📅学习安排 课程总时长为8周,每周安排一定量的直播课和互动课。直播课主要讲解算法理论和解题思路,互动课则侧重于代码实战和问题答疑。同时,每周会布置相应的作业和练习题,帮助学员巩固所学知识。 ### 🎁课程福利 - **免费公开教学资源**:提供数据工程项目及面试经验分享等免费公开课程,由资深工程师空降讲解,让学员获取更多行业知识和求职技巧。 - **就业推荐**:对于表现优秀的学员,课程团队将提供就业内推机会,推荐至合作的大厂岗位,增加学员获得心仪工作的机会。 - **认证证书**:完成所有课程学习并通过考核的学员,将获得九章算法颁发的专业认证证书,为简历增添亮点,提升竞争力。 如果你想提升算法能力,斩获大厂offer,九章算法班专业版2025将是你的绝佳选择。快来加入我们,开启算法学习之旅吧! #### CS求职指导 & 零基础入门 - CS求职指导 - 课程介绍 - 编程语法基础 #### 编程基础知识:循环、函数与面向对象 Loop, Function, and Object Oriented(Python 语言) - 程序控制流 Control Flow - 函数 Function - 面向对象入门 Object Oriented #### 编程基础知识:变量与程序控制流 Variable & Control Flow(Java 语言) - Java语言基础 I - 实战面试真题 #### 算法编程基础(I) - 编程基础知识 - 算法基础 #### 列表、元组、字符串与引用 List, Tuple, String, and Reference(Python 语言) - 什么是数据结构? - 列表(List)和元组(Tuple) - 字符串(String) - 什么是引用(Reference)? #### 字符串、面向对象、引用、数据结构 String, Object Oriented, Reference, and Data Structure(Java 语言) - Java语言基础 II - 实战面试真题 - OOP #### 算法编程基础(II) & 字符串String(I) - 编程基础知识 - 数据结构基础 - 算法基础 #### 手把手带写代码:字符串 Algorithm Practice: String(Python 语言) - 1781.Reverse ASCII Encoded Strings - 1784.Decrease To Be Palindrome - 958.Palindrome Data Stream - 1819.Longest Semi Alternating Substring #### 手把手带写代码:字符串 Algorithm Practice: String(Java 语言) - 1781.Reverse ASCII Encoded Strings - 1784.Decrease To Be Palindrome - 958.Palindrome Data Stream - 1819.Longest Semi Alternating Substring #### 字符串String(II) & 双指针 Two Pointers - 数据结构基础 - 算法基础 - 编程基础知识 #### 线性数据结构-链表 Linear Data Structure: Linked List(Python 语言) - 链表(Linked List) - 算法的时间复杂度分析 (Time Complexity) #### 链表及其操作,算法的时间复杂度 Linked Lists & Time Complexity(Java 语言) - OO基础、引用和链表 (Object Oriented, Reference,Linked List) - 实战面试真题 #### 手把手带写代码:链表 Algorithm Practice: LinkedList(Python 语言) - 219.Insert Node in Sorted Linked List - 452.Remove Linked List Elements - 228.Middle of Linked List - 170.Rotate List #### 手把手带写代码:链表 Algorithm Practice: LinkedList(Java 语言) - 219.Insert Node in Sorted Linked List - 452.Remove Linked List Elements - 228.Middle of Linked List - 170.Rotate List #### 面向对象编程(OOP)基础 - 面向对象编程基础 - 数据结构基础 - 编程语法基础 #### 栈和队列 Stack and Queue(Python 语言) - 栈(Stack) - 队列(Queue) #### 栈和队列 Stack & Queue(Java 语言) - 栈和队列 Stack and Queue - 实战面试真题 #### 手把手带写代码:栈和队列 Algorithm Practice Stack and Queue(Python 语言) - 492.Implement Queue by Linked List - 541.Zigzag Iterator II - 421.Simplify Path - 575.Decode String #### 手把手带写代码:栈和队列 Algorithm Practice: Stack and Queue(Java 语言) - 492.Implement Queue by Linked List - 541.Zigzag Iterator II - 421.Simplify Path - 575.Decode String #### 二叉树的遍历方式 Traverse Binary Tree(Python 语言) - 什么是树(Tree)? - 二叉树的深度优先遍历 (BFS) - 递归(Recursive) - 二叉树的深度优先遍历 (DFS) #### 二叉树的遍历方式 Traverse Binary Tree(Java 语言) - 树和递归 Tree & Recursion - 二叉树的宽度优先遍历 - 实战面试真题 #### 链表 Linked List & 栈 Stack & 队列 Queue & 二叉树 Binary Tree (1) - 数据结构基础 - 算法基础 #### 手把手带写代码:二叉树 Algorithm Practice: Binary Tree(Python 语言) - 71.Binary Tree Zigzag Level Order Traversal - 650.Find Leaves of Binary Tree - 1807.Fibonacci easy #### 手把手带写代码:二叉树 Algorithm Practice: Binary Tree(Java 语言) - 71.Binary Tree Zigzag Level Order Traversal - 650.Find Leaves of Binary Tree - 1807.Fibonacci easy #### 二叉搜索树 Binary Search Tree(Python 语言) - 二分搜索树(BST) #### 二叉搜索树 Binary Search Tree(Java 语言) - 二分搜索树(BST) #### 手把手带写代码:分治法 Algorithm Practice: Divide and Conquer(Python 语言) - 1524.Search in a Binary Search Tree - 701.Trim a Binary Search Tree - 1359.Convert Sorted Array to Binary Search Tree #### 手把手带写代码:分治法 Algorithm Practice: Divide and Conquer(Java 语言) - 1524.Search in a Binary Search Tree - 701.Trim a Binary Search Tree - 1359.Convert Sorted Array to Binary Search Tree #### 二叉树 Binary Tree (2) & 哈希表 Hash Table (1) - 数据结构基础 - 算法基础 #### 集合与字典 Set & Map(Python 语言) - 集合(Set)和字典(Dictionary) #### 集合与字典 Set & Map(Java 语言) - 集合和索引 Set & Index - 哈希表及其实现 Hash Table - 解决冲突的方法 #### 手把手带写代码:哈希表 Algorithm Practice: Hash Table(Python 语言) - 1796.K-Difference - 1299.Bulls and Cows - 1035.Rabbits in Forest - 856.Sentence Similarity #### 手把手带写代码:哈希表 Algorithm Practice: Hash Table(Java 语言) - 1796.K-Difference - 1299.Bulls and Cows - 1035.Rabbits in Forest - 856.Sentence Similarity #### 排序算法 Quick Sort & Merge Sort(Python 语言) - 普通排序算法 - 归并排序 - 快速排序 - 使用 Python 的 Sort 和 cmp 函数实现各种情况下的排序 #### 高级排序算法 Sort Advanced(Java 语言) - 排序 - 实战面试真题 #### 哈希表 Hash Table (2) & 排序 Sorting - 数据结构基础 - 算法基础 #### 手把手带写代码:排序 Algorithm Practice: Sort(Python 语言) - 49.Sort Letters by Case - 532.Reverse Pairs - 1160.Campus Bikes #### 手把手带写代码:排序 Algorithm Practice: Sort(Java 语言) - 148.Sort Colors - 464.Sort Integers II - 532.Reverse Pairs #### 资深面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题 Algorithm Interview Skills - 如何在算法面试中正确的沟通? - 如何让面试官在面试中感觉你很牛逼? - 如何修炼Bug Free的能力 - 如何做到刷100题顶过别人刷300题 - 算法面试考察范围与频率一览 - 新版课程特色一览 #### 真实面试案例分析(上)与面试评分标准 Interview Case Study Ⅰ - 最长回文子串Longest Palindromic Substring - 面试评分标准 - 快速提高Coding Quality的十二个技巧 #### 真实面试案例分析(下)与80%求职者会踩坑的基础知识 Interview Case Study Ⅱ - 字符串查找strStr - 为什么我们不需要学习贪心法 - 三个你必须知道的语言知识 - 十个你必须掌握的字符串处理函数 #### 复杂度理论与双指针算法入门 Complexity & Two Pointers - 四个算法的复杂度维度 - 时间复杂度是O(N)的算法有哪些 - 三种双指针题型 - Valid Palindrome && II - Two Sum型双指针经典题 #### 必须熟练掌握的两个排序算法 Quick Sort & Merge Sort - 两个必须熟练掌握的排序算法 - Quick Select快速选择算法 #### 时间复杂度为O(logN)的高频算法——二分法 Bisection Method(Ⅰ) - 时间复杂度的分析技巧——T函数推导法T function derivation method - 通过时间复杂度倒推算法的技巧 - 递归是什么,如何实现二分 - 什么是堆空间(Heap Memory),什么是栈空间(Stack Memory) - 什么是Stack Overflow,如何造成的,如何避免 #### 一个不会出现死循环的通用二分法模板 Bisection Method - 二分法的基本原理 - 通用模板 - 使用二分法解决求第一个位置,求最后一个位置和求任意位置的二分问题 - 二分算法的判断条件 #### 高频算法之王——双指针算法之相向双指针 Opposite Direction Two Pointers - 两数之和的十种变形题 - 时间复杂度与循环层数的关系 - Partition型相向双指针 #### 简约而不简单——二分法学习的四重境界 Bisection Method(Ⅱ) - 第一重境界写出不会死循环二分法 - 第二重境界在排序的输入集上进行二分 - 第三重境界在未排序输入集上进行二分 - 第四重境界在结果集上进行二分 #### 队列知识点从易到难 Queue - 队列及相关面试题 - Java中的Interface是什么 - 链表和数组实现队列的区别 - 循环队列的实现方法 #### 宽度优先搜索与图论入门 Breadth First Search - 宽度优先搜索的适用场景 - 宽度优先搜索的三种实现方法 - 无向图和有向图的存储方法 #### 用递归实现遍历法和分治法 Recursion: Divide and Conquer - 递归Recursion,深搜DFS,回溯Backtracking的联系和区别 - 递归三要素是什么 - 通过二叉树学习DFS中的遍历法 - 什么是分治法,遍历法和分治法的区别 #### 使用非递归实现二叉树的遍历 Binary Tree - 非递归版本的二叉树中序遍历 #### 性价比之王——宽度优先搜索 Breadth First Search - 连通块问题 - 图的层级遍历与简单图最短路径问题 - 拓扑排序 #### 解决99%二叉树问题的算法——分治法 Binary Tree: Divide and Conquer - 用分治法解决二叉树求值求路径的问题 - 用分治法解决二叉树形态变换的问题 #### 组合类DFS - 组合类搜索的隐式图模型 - 组合类搜索的时间复杂度和适用条件 - 如何对搜索结果进行去重 #### 排列类DFS - 排列类搜索的隐式图模型 - 排列类搜索的时间复杂度和适用条件 - 通过排列类搜索看搜索与多重循环的区别 - 著名的NP问题:TSP问题(旅行商问题) #### 哈希表的原理 Hash Table - HashMap和HashSet的联系和区别 - 哈希表Hash Table的基本原理 - 什么是哈希函数Hash Function - 如何解决冲突Collision - 哈希表扩容问题 #### 堆的基本原理 Heap - Priority Queue和堆的联系和区别 - 堆的基本原理 - 堆的基本操作Sift Up和Sift Down - 堆的增删查改 - 堆的初始化Heapify - 堆排序 #### 刷人利器——深度优先搜索 Depth First Search - 排列组合类搜索 - 矩阵上的DFS - 如何解决求所有最短路线的问题 #### 高频数据结构——哈希表与堆 Hash Table and Heap - 数据结构设计题的考点 - 数据结构设计题的时间复杂度计算方式 - 在线算法vs离线算法 - 堆Heap的实战真题 - 高级数据结构的Cheat Sheet #### 从搜索到动规——记忆化搜索入门 Memorization Search - 什么时候可以使用记忆化搜索 - DFS和记忆化搜索的区别 - 如何用三行代码让DFS变成记忆化搜索 - 用记忆化搜索解决博弈型动态规划 - 记忆化搜索的缺陷 #### 动态规划入门与动规四要素 Dynamic Programming - 动态规划DP与记忆化搜索的关系 - 多重循环与记忆化搜索实现动态规划的区别 - 什么时候使用动态规划 - 自底向上的动态规划 - 自顶向下的动态规划 #### 动态规划使用场景与题型分类 Dynamic Programming - 动态规划算法的使用场景 - 动态规划题型一览 - 坐标型动态规划 #### 背包型动态规划入门 Backpack Dynamic Programming - 01背包01 Backpack - 带价值的背包Backpack with value - 多重背包Multiple backpacks #### 让面试官眼前一亮——记忆化搜索Memorization Search - 三种适用动态规划的场景 - 三种不适用动态规划的场景 - 用记忆化搜索解决字符串相关的DP问题 #### 最难的算法——动态规划 Dynamic Programming - 动态规划的解题步骤 - 动态规划的空间优化技巧——滚动数组 - 坐标型动态规划的分支——接龙型动态规划 - 通过经典DP题LIS看动态规划如何记录具体方案 - 上下左右都可以走的矩阵如何进行动态规划 #### 双指针算法之同向双指针 Same Direction Two Pointers(上) - Two Sum的第十一种变形题——两数之差 - 全零子串问题 - 数组去重问题 #### 双指针算法之同向双指针 Same Direction Two Pointers(下) - 数组和字符串上的同向双指针 - 快慢指针算法 #### 二分法实战练习 Bisection Method - 排序输入集:排序矩阵找数问题 - 未排序输入集:最小的包含所有连通01块的矩阵 - 结果集二分:抄书问题 #### 时间复杂度低于O(N)的算法 Time complexity - 比O(N)小的算法 -O(LogN) - O(√N)的算法 #### 使用宽度优先搜索找所有方案 Breadth First Search - 使用BFS求所有方案类问题 - 使用BFS序列化二叉树 #### 双向宽度优先搜索算法 Breadth First Search - 双向宽度优先搜索算法 #### 后序遍历非递归与Morris算法 Post-order & Morris - 非递归实现后序遍历 - Morris算法 #### 二叉查找树的增删查改 Binary Search Tree - 二叉查找数 BST (Binary Search Tree)的增删查改 #### 非递归的方式实现排列和组合类DFS Non-recursion - 使用求下一个排列的算法实现非递归 - 更通用的非递归实现方法 #### DFS经典题精讲 - N皇后问题及程序结构的艺术 - 数独及搜索顺序的优化算法 #### 数据结构设计类问题 Data Structure - 最小栈Minimal stack - 最大栈Maximum stack - 两个栈实现队列Two stacks implement queues - 两个队列实现栈Two queues implement the stack #### 外排序算法与数组合并类问题 Outer Sort & Array Merge - 外排序Outer sorting - 三种K路归并算法 - 数组合并的相关问题 #### 区间型动态规划入门 Interval Dynamic Programming - 区间型动态规划的题目特点 - 区间型动态规划的循环方式 - 三个例题入门区间动态规划 #### 匹配型动态规划入门 Matching Dynamic Programming - 匹配型动态规划的题目特点 - 匹配型动态规划的代码实现 - 三个例题入门匹配型动规 #### 划分型动态规划入门 Partition Dynamic Programming - 划分型动态规划的题目特点 - 划分型动态规划的代码实现 - 三个例题入门划分型动规 #### 接龙型动态规划的二分解法 Dynamic Programming - 接龙型动态规划的题目特点 - 接龙型动态规划的代码实现 - 最长上升子序列(LIS)的二分解法 - 三个例题吃透接龙型动态规划 #### 算法面试高频知识点与技巧 Algorithm Interview Skills - 临时抱佛脚 vs 系统性学习 - 本课程的先修知识点、建议学习路径 - 两种高频技巧 - 四份 Cheat Sheet 最新版本 - 后续课程大纲 - Q & A #### 算法面试高频知识点与技巧 Algorithm Interview Skills(令狐) - 临时抱佛脚 vs 系统性学习 - 本课程的先修知识点、建议学习路径 - 两种高频技巧 - 四份 Cheat Sheet 最新版本 - 后续课程大纲 - Q & A #### 面试中的高频算法:同向双指针 Same Direction Two Points - 最暴力到最优:在面试中你能实现到哪一步? - F家:和大于S的最小子数组 - 大厂都会出的“最小子串覆盖”问题 - G家新题:加热器 Heaters #### 面试中的高频算法:同向双指针 Same Direction Two Pointers(令狐) - 最暴力到最优:在面试中你能实现到哪一步? - F家:和大于S的最小子数组 - 大厂都会出的“最小子串覆盖”问题 - G家新题:加热器 #### 算法学习拓展知识:暴力、贪心、模拟等 Brute Force, Greedy & Implementation, etc - 暴力(Brute Force)、贪心(Greedy)、模拟(Implementation)是什么算法? - 如何从数据范围推导时间复杂度? - 二分法进阶 #### 滑窗型双指针与隔板法 Sliding Window & Stars and Bars - 一个例子带你看破滑窗型双指针(Sliding Window) - 什么是隔板法? - 隔板法套双指针 —— 摘苹果问题 #### BFS基础知识回顾 BFS Review - BFS基本模版回顾 - 如何解决分层BFS问题 - 如何解决基本的拓扑排序问题 #### DFS课前预习内容 DFS Preview - 二叉树(Binary Tree)的直径问题 - 如何解决图中的直径 - 二叉树(Binary Tree)分治(Divide & Conquer)预习练习题 #### BFS进阶与最短路算法 BFS Advanced & Shortest Path Fast Algorithm - BFS 解决最短路径问题时可能产生的各类变化 - 宽度优先搜索代码模板 - BFS 两种实现方式 - 在不同情况下各自的优劣对比 - 图的邻接表(Adjacency List)存储方法 - 使用 SPFA 算法解决复杂图最短路径问题 - 双向宽度优先搜索代码模板 - 双向宽度优先搜索到底带来多大的优化? - 如何记录 BFS 求出的最短路径的具体方案 #### BFS进阶与最短路算法 BFS Advanced & Shortest Path Fast Algorithm(令狐) - BFS 解决最短路径问题时可能产生的各类变化 - 宽度优先搜索代码模板 - BFS 两种实现方式 - 在不同情况下各自的优劣对比 - 图的邻接表(Adjacency List)存储方法 - 使用 SPFA 算法解决复杂图最短路径问题 - 双向宽度优先搜索代码模板 - 双向宽度优先搜索到底带来多大的优化? - 如何记录 BFS 求出的最短路径的具体方案 #### DFS进阶 DFS Advanced - 二叉搜索树(BST)有什么性质? - 怎样快速实现在二叉树上的DFS? - 如何理解分治型DFS - 分治型DFS与记忆化搜索、DP之间是什么关系? - 二叉树上的DFS问题 - 隐式图上的DFS问题 - 大厂DFS真题详解 #### DFS进阶(令狐) - 二叉搜索树(BST)有什么性质? - 怎样快速实现在二叉树上的DFS? - 如何理解分治型DFS - 分治型DFS与记忆化搜索、DP之间是什么关系? - 二叉树上的DFS问题 - 隐式图上的DFS问题 - 大厂DFS真题详解 #### 动态规划预习知识 Dynamic Programming Preview - 动态规划的四要素 - 记忆化搜索与动态规划是什么关系? - 如何优化动态规划算法的空间复杂度? - 01背包及其优化 - 完全背包及其优化 #### 概率型动态规划 Probabilistic Dynamic Programming - 概率型动态规划基本特点 - 概率型动态规划解题思路 - 概率型动态规划例题讲解 - 概率型动态规划扩展知识 #### 动态规划进阶(上)—坐标型动态规划与背包型动态规划 Dynamic programming Ⅰ - 动态规划的使用场景 - 动态规划的分类 - - 三个关键词解析动态规划问题 - 坐标:LintCode 1827. 停在原地的方案数 - 子序列:LintCode 1702. 不同的子序列 - 求和:LintCode 1607. 盈利计划 #### 动态规划进阶(上)—坐标型动态规划与背包型动态规划 Dynamic Programming Ⅰ(令狐) - 动态规划的使用场景 - 动态规划的分类 - - 三个关键词解析动态规划问题 - 坐标:LintCode 1827. 停在原地的方案数 - 子序列:LintCode 1702. 不同的子序列 - 求和:LintCode 1607. 盈利计划 #### 动态规划进阶(下)—动态规划习题训练 Dynamic Programming Ⅱ - 坐标型动态规划:LintCode 1861. 老鼠跳跃 - 如何正确计算正方形的数量:LintCode 1869. 全1正方形 - 分组背包:LintCode 1800. 浮点数组合和 - 区间型动态规划:LintCode 1798. 合并石头的最低成本 #### 动态规划进阶(下)—动态规划习题训练 Dynamic Programming(Ⅱ)(令狐) - 坐标型动态规划:LintCode 1861. 老鼠跳跃 - 如何正确计算正方形的数量:LintCode 1869. 全1正方形 - 分组背包:LintCode 1800. 浮点数组合和 - 区间型动态规划:LintCode 1798. 合并石头的最低成本 #### 并查集初探 Union Find - 使用并查集解决 BFS 难以解决的问题 - 并查集是什么 - 并查集的结构以及模板 - 并查集能维护什么 #### 字典树入门 Intro to Trie - 比哈希表好用的字典树 - 字典树的考察方法 - 字典树的结构以及模板代码 - 使用字典树维护前缀的出现次数 - 字典树的其他操作 #### 连通性问题通解:并查集 Union Find - 有了BFS,为啥要用并查集? - 并查集怎么考,考什么? - G家并查集题目:岛屿的个数系列 - 并查集的其他可维护信息 - 并查集加速其他算法 #### 连通性问题通解:并查集 Union Find(令狐) - 有了BFS,为啥要用并查集? - 并查集怎么考,考什么? - G家并查集题目:岛屿的个数系列 - 并查集的其他可维护信息 - 并查集加速其他算法 #### 字典树的常见考点及题目解析 Trie - 字典树的适用场景 - 使用字典树求解最长、最短的公共前缀 - 查询前缀问题 - 不适宜字典树的情况 #### 字典树的常见考点及题目解析 Trie(令狐) - 字典树的适用场景 - 使用字典树求解最长、最短的公共前缀 - 查询前缀问题 - 不适宜字典树的情况 #### 单调栈介绍与实战 Monotone Stack - 两道单调栈入门问题 - 单调栈的变形:单调队列 #### 使用扫描线解决区间问题 Problem of interval - 扫描线算法介绍 - 三道例题看透一维扫描线问题 #### 不易想到的 O(n) 算法:单调栈 Monotone Stack - 什么是单调栈算法 - 单调栈的使用场景 - 双指针与单调栈的区别 - 使用单调栈加速动态规划 - 单调队列的实现 #### 不易想到的 O(n) 算法:单调栈 Monotone Stack(令狐) - 什么是单调栈算法 - 单调栈的使用场景 - 双指针与单调栈的区别 - 使用单调栈加速动态规划 - 单调队列的实现 #### 堆的解题技巧 Heap - G家,Twitter真题:接雨水 Trap Rain Water - 问题升级:接雨水 II Trap Rain Water II - 大顶堆 OR 小顶堆 的选择: - 根据使用场景判断数据结构 #### 堆的解题技巧 Heap(令狐) - G家,Twitter真题:接雨水 - 问题升级:接雨水 II - 大顶堆 OR 小顶堆 的选择: - 根据使用场景判断数据结构 #### 前缀和扩展知识 Prefix Sum - 前缀和的两种定义方法 - 如何在二维矩阵中使用前缀和 - 面试经典例题讲解 #### BFS课后练习讲解 BFS Practice - 岛屿数量变形:最大连通面积 - 搜索与动态规划的抉择——地图跳跃问题 - BFS真题:湖面逃跑问题 #### DFS扩展知识 DFS Advanced - Amazon 经典问题:Critical Connection - Sliding window的优化:A*算法 #### 动态规划进阶I 扩展知识 Dynamic Programming Advanced I - 每次可以合并K堆的stone game - O(N^2)实现stone game —— 平行四边形优化 #### 大厂动态规划题集 Dynamic Programing - 美团:考试策略 - 阿里:染色问题 - 字节跳动:最小的窗口子序列 - 猿辅导:零钱兑换 #### 双指针、二分法实战 Two Pointers & Bisection Method - 同向双指针新题 - 二分法经典题目 #### 最小生成树算法 Minimum Spanning Tree - 修建道路的问题 - 什么是最小生成树(MST) - 为什么要学习最小生成树算法 - 使用并查集的最小生成树算法 - 另一种解决最小生成树问题的算法 #### 字典树难题解析 Trie - 位运算知识点复习 - 使用数字型字典树解决两道面试真题 #### 栈与表达式处理 Stack and Expression Processing - 表达式处理问题三大考点 - 使用递归和栈解决三种类型的表达式 - 什么是中缀、后缀表达式 - 使用栈求值后缀表达式 - 使用单调栈转化中缀表达式 #### 使用线段树解决区间问题 Segment Tree - 线段树介绍 - 线段树的构造 - 线段树的基本操作 - 线段树的简单应用