-
第1章 算法面试到底是什么鬼?
- 1-1 算法面试不仅仅是正确的回答问题 (19:37)
- 1-2 算法面试只是面试的一部分 (14:51)
- 1-3 如何准备算法面试 (17:38)
- 1-4 如何回答算法面试问题 (13:40)
-
第2章 面试中的复杂度分析
了解常见时间复杂度; 建立复杂度和数据规模之间的概念; 通过实验的方式,亲自验证自己代码的时间复杂度;理解均摊复杂度分析
- 2-1 究竟什么是大O(Big O) (19:52)
- 2-2 对数据规模有一个概念 (11:26)
- 2-3 简单的复杂度分析 (19:20)
- 2-4 亲自试验自己算法的时间复杂度 (14:53)
- 2-5 递归算法的复杂度分析 (14:46)
- 2-6 均摊时间复杂度分析(Amortized Time Analysis) (15:16)
- 2-7 避免复杂度的震荡 (11:25)
-
第3章 数组中的问题其实最常见
通过基础问题,掌握写出正确算法的“秘诀”; 巧妙使用双索引技术,解决复杂问题;对撞指针- 滑动窗口
- 3-1 从二分查找法看如何写出正确的程序 (15:27)
- 3-2 改变变量定义,依然可以写出正确的算法 (12:06)
- 3-3 在LeetCode上解决第一个问题 Move Zeros (13:27)
- 3-4 即使简单的问题,也有很多优化的思路 (15:30)
- 3-5 三路快排partition思路的应用 Sort Color (22:26)
- 3-6 对撞指针 Two Sum II - Input Array is Sorted (19:44)
- 3-7 滑动窗口 Minimum Size Subarray Sum (14:09)
- 3-8 在滑动窗口中做记录 Longest Substring Without Repeating Characters (15:20)
-
第4章 查找表相关问题
树和哈希表两种不同底层实现的查找表; 使用map,set,unordered_map、unordered_set解决算法问题
- 4-1 set的使用 Intersection of Two Arrays (11:12)
- 4-2 map的使用 Intersection of Two Arrays II (13:05)
- 4-3 set和map不同底层实现的区别 (19:00)
- 4-4 使用查找表的经典问题 Two Sum (16:56)
- 4-5 灵活选择键值 4Sum II (13:25)
- 4-6 灵活选择键值 Number of Boomerangs (14:45)
- 4-7 查找表和滑动窗口 Contain Duplicate II (11:20)
- 4-8 二分搜索树底层实现的顺序性 Contain Duplicate III (10:50)
-
第5章 在链表中穿针引线
在链表问题中灵活使用指针; 使用虚拟头结点简化链表问题; 在链表中使用双指针解决复杂问题
- 5-1 链表,在节点间穿针引线 Reverse Linked List (15:44)
- 5-2 测试你的链表程序 (16:26)
- 5-3 设立链表的虚拟头结点 Remove Linked List Elements (17:08)
- 5-4 复杂的穿针引线 Swap Nodes in Pairs (13:30)
- 5-5 不仅仅是穿针引线 Delete Node in a Linked List (07:29)
- 5-6 链表与双指针 Remove Nth Node Form End of List (16:49)
-
第6章 栈,队列,优先队列
栈的基础应用; 巧妙使用栈写出非递归算法; 深入理解系统栈,模拟系统的递归调用
- 6-1 栈的基础应用 Valid Parentheses (16:10)
- 6-2 栈和递归的紧密关系 Binary Tree Preorder, Inorder and Postorder Traversal (16:03)
- 6-3 运用栈模拟递归 (19:33)
- 6-4 队列的典型应用 Binary Tree Level Order Traversal (10:26)
- 6-5 BFS和图的最短路径 Perfect Squares (21:20)
- 6-6 优先队列 (11:09)
- 6-7 优先队列相关的算法问题 Top K Frequent Elements (15:37)
-
第7章 二叉树和递归
通过二叉树天然的递归结构理解递归算法;递归算法的两要素;二分搜索树中的算法问题
- 7-1 二叉树天然的递归结构 (15:58)
- 7-2 一个简单的二叉树问题引发的血案 Invert Binary Tree (09:08)
- 7-3 注意递归的终止条件 Path Sum (12:04)
- 7-4 定义递归问题 Binary Tree Path (13:34)
- 7-5 稍复杂的递归逻辑 Path Sum III (14:11)
- 7-6 二分搜索树中的问题 Lowest Common Ancestor of a Binary Search Tree (17:46)
-
第8章 递归和回溯法
掌握回溯算法的基本写法; 排列问题- 组合问题; Floodfill; 使用回溯算法解决简单的人工智能问题
- 8-1 树形问题 Letter Combinations of a Phone Number (18:09)
- 8-2 什么是回溯 (18:16)
- 8-3 排列问题 Permutations (19:02)
- 8-4 组合问题 Combinations (14:27)
- 8-5 回溯法解决组合问题的优化 (17:29)
- 8-6 二维平面上的回溯法 Word Search (21:45)
- 8-7 floodfill算法,一类经典问题 Number of Islands- (21:27)
- 8-8 回溯法是经典人工智能的基础 N Queens (25:17)
-
第9章 动态规划基础
深入理解什么是动态规划; 记忆化搜索; 重叠子问题和问题的无后效性; 01背包问题详解- LIS,LCS等问题分析; 使用回溯算法解决简单的人工智能问题
- 9-1 什么是动态规划 (20:27)
- 9-2 第一个动态规划问题 Climbing Stairs (14:02)
- 9-3 发现重叠子问题 Integer Break (25:10)
- 9-4 状态的定义和状态转移 House Robber (27:19)
- 9-5 0-1背包问题 (32:37)
- 9-6 0-1背包问题的优化和变种 (20:18)
- 9-7 面试中的0-1背包问题 Partition Equal Subset Sum (27:34)
- 9-8 LIS问题 Longest Increasing Subsequence (25:12)
- 9-9 LCS,最短路,求动态规划的具体解以及更多 (21:00)
-
第10章 贪心算法
- 10-1 贪心基础 Assign Cookies (12:12)
- 10-2 贪心算法与动态规划的关系 Non-overlapping Intervals (17:58)
- 10-3 贪心选择性质的证明 (15:19)
Part3Practise
Folders and files
Name | Name | Last commit date | ||
---|---|---|---|---|
parent directory.. | ||||