``# 分类
- array 数组
- hashtable 查找表
- linkedlist 链表
- stackqueue 栈与队列
- binarysearch 二叉树和递归
- recursion-backtracking 递归与回溯
- dynamic 动态规划
- greedy 贪心
- binarysearch 二分查找
- bitoperation 位运算
- dfsbfs 深度宽度搜索
- divide 分治
- leetcode-common 工具类
- string 字符串
- union-find 并查集
# 第一遍
| 章节 | 讲解例题 | 课程练习题 |
| ------------------------------------------------------------ | ---------- | ----------------------- |
| **第一章 算法面试到底是什么鬼?** | [无] | [无] |
| **第二章 面试中的复杂度分析** | [无] | [无] |
| **第三章 数组中的问题最常见** | | |
| 3-1 从二分查找法看如何写出正确的程序 | [无] | [无] |
| 3-2 改变变量定义,依然可以写出正确的算法 | [无] | [无] |
| 3-3 在LeetCode上解决第一个问题 Move Zeros | ~~283~~ | [无] |
| 3-4 即使简单的问题,也有很多优化的思路 | ~~283~~ | ~~27 26 80~~ |
| 3-5 三路快排partition思路的应用 Sort Color | ~~75~~ of40 | ~~88 215~~ |
| 3-6 对撞指针 Two Sum II - Input Array is Sorted | ~~167~~ | ~~125 344 345 11~~ |
| 3-7 滑动窗口 Minimum Size Subarray Sum | ~~209 3~~ | ~~438 76~~ |
| 3-8 其他 | | 1013 |
| **第四章 查找表相关问题** | | |
| 4-1 set的使用 Intersection of Two Arrays | ~~349~~ | [无] |
| 4-2 map的使用 Intersection of Two Arrays II | ~~350~~ | [无] |
| 4-3 set和map不同底层实现的区别 | ~~349 350~~ | ~~136 242 202 290 205 451~~ |
| 4-4 使用查找表的经典问题 Two Sum | ~~1~~ | ~~15 18 16~~ |
| 4-5 灵活选择键值 4Sum II | ~~454~~ | ~~49~~ |
| 4-6 灵活选择键值 Number of Boomerangs | ~~447~~ | ~~*149~~ **719** |
| 4-7 查找表和滑动窗口 Contain Duplicate II | ~~219~~ | |
| 4-8 二分搜索树底层实现的顺序性 Contain Duplicate III | ~~*220~~ | [无] |
| **第五章 在链表中穿针引线** | | |
| 5-1 链表,在节点间穿针引线 Reverse Linked List | ~~206~~ | ~~*92~~ |
| 5-2 测试你的链表程序 | ~~206~~ | ~~83~~ ~~86~~ ~~328~~ ~~2 445~~ |
| 5-3 设立链表的虚拟头节点 Remove Linked List Elements | ~~203~~ | ~~82~~ ~~*21(递归)~~ |
| 5-4 复杂的穿针引线 Swap Nodes in Pairs | ~~*24~~ | **25 147 148** |
| 5-5 不仅仅是穿针引线 Delete Node in a Linked List | ~~237~~ | [无] |
| 5-6 链表与双指针 Remove Nth Node Form End of List | ~~19~~ | **61** ~~143 234~~ |
| 额外刷题 | **160** | ~~876~~ |
| **第六章 栈、队列、优先队列** | | |
| 6-1 栈的基础应用 Valid Parentheses | ~~20~~ | ~~150 71~~ |
| 6-2 栈和递归的紧密关系 Binary Tree Preorder, Inorder and Postorder Traversal | ~~144 94 145~~ | [无] |
| 6-3 运用栈模拟递归 | ~~*144 94 145~~ | **341** |
| 6-4 队列的典型应用 Binary Tree Level Order Traversal | ~~102~~ | ~~107 103 199~~ **346** |
| 6-5 BFS和图的最短路径 Perfect Squares | ~~*279~~ | **127 126** **286** |
| 6-6 优先队列 | [无] | [无] |
| 6-7 优先队列相关的算法问题 Top K Frequent Elements | ~~347~~ | ~~23~~ |
| **第七章 二叉树和递归** | | |
| 7-1 二叉树天然的递归结构 | ~~*104(重点看)~~ | ~~*111(重点看)~~ |
| 7-2 一个简单的二叉树问题引发的血案 Invert Binary Tree | ~~*226~~ | ~~100 101 222 *110~~ |
| 7-3 注意递归的终止条件 Path Sum | ~~112~~ | ~~404~~ |
| 7-4 定义递归问题 Binary Tree Path | ~~257~~ | ~~113 129 222~~ |
| 7-5 稍复杂的递归逻辑 Path Sum III | ~~437~~ | [无] |
| 7-6 二分搜索树中的问题 Lowest Common Ancestor of a Binary Search Tree | ~~783 235~~ | ~~*98~~ **450 108 230 236 530** |
| **第八章 递归和回溯法** | | |
| 8-1 树形问题 Letter Combinations of a Phone Number | ~~*17~~ | [无] |
| 8-2 什么是回溯 | ~~17~~ | ~~*93~~ 131 |
| 8-3 排列问题 Permutations | ~~*46~~ | ~~*47~~ |
| 8-4 组合问题 Combinations | ~~*77~~ | [无] |
| 8-5 回溯法解决组合问题的优化 | ~~*77~~ | ~~39~~ ~~40~~ 216 **78 90** ~~401~~ |
| 8-6 二维平面上的回溯法 Word Search | ~~79~~ | [无] |
| 8-7 floodfill算法,一类经典问题 Number of Islands | ~~200~~ | 130 417 |
| 8-8 回溯法是经典人工智能的基础 N Queens | ~~51~~ | ~~52~~ 37 |
| **第九章 动态规划基础** | | |
| 9-1 什么是动态规划 | [无] | [无] |
| 9-2 第一个动态规划问题 Climbing Stairs | ~~70~~ | ~~120~~ ~~64~~ |
| 9-3 发现重叠子问题 Integer Break | ~~*343~~ | ~~*279 *91 62 *63~~ |
| 9-4 状态的定义和状态转移 House Robber | ~~198~~ | 213 337 309 |
| 9-5 0-1背包问题 | [无] | [无] |
| 9-6 0-1背包问题的优化和变种 | [无] | [无] |
| 9-7 面试中的0-1背包问题 Partition Equal Subset Sum | ~~*416~~ | ~~*322~~ 377 474 139 494 |
| 9-8 LIS问题 Longest Increasing Subsequence | ~~300~~ | 376 |
| 9-9 LCS,最短路,求动态规划的具体解以及更多 | [无] | [无] |
| 其他 | ~~53~~ | [无] |
| **第十章 贪心算法** | | |
| 10-1 贪心基础 Assign Cookies | ~~455~~ | ~~392~~ |
| 10-2 贪心算法与动态规划的关系 Non-ov