目录
0.排序
1.栈与队列
剑指 Offer 09. 用两个栈实现队列(简单)
剑指 Offer 30. 包含min函数的栈(简单)
2.链表
剑指 Offer 06. 从尾到头打印链表(简单):可以直接反转链表,更快一点
剑指 Offer 24. 反转链表(简单)
剑指 Offer 35. 复杂链表的复制(中等):和克隆图差不多
3.字符串
28. 实现 strStr()(简单)
剑指 Offer 05. 替换空格(简单)
5. 最长回文子串(中等)
4.二分
704. 二分查找(简单)
35. 搜索插入位置(简单)
34. 在排序数组中查找元素的第一个和最后一个位置(中等)
剑指 Offer 53 - I. 在排序数组中查找数字 I(简单)
Lintcode460 · 在排序数组中找最接近的K个数(中等)
剑指 Offer 04. 二维数组中的查找(中等)
5.双指针
1. 两数之和(简单)
125. 验证回文串(简单)
680. 验证回文字符串 Ⅱ(简单)
209. 长度最小的子数组(中等)
4. 寻找两个正序数组的中位数(困难)
6.二叉树遍历
前序遍历中序遍历要求掌握递归非递归写法,其中中序遍历非递归写法在BST题型中将会用到。
144. 二叉树的前序遍历(简单)
94. 二叉树的中序遍历(简单)
145. 二叉树的后序遍历(简单)
102. 二叉树的层序遍历(中等)
剑指 Offer 32 - III. 从上到下打印二叉树 III(中等)
7.广搜BFS
BFS主要用于解决三类问题:
(1)拓扑排序
(2)层序遍历搜索
(3)联通块问题
7.1拓扑排序题型
拓扑排序的题型又可以细分为:
(1)是否存在拓扑排序
(2)存在多种拓扑排序,求其中一种
(3)是否存在唯一拓扑排序
(4)求字典序的拓扑排序
Lintcode127 · 拓扑排序(中等)
207. 课程表(中等)
210. 课程表 II(中等)
剑指 Offer II 114. 外星文字典(困难)
剑指 Offer II 115. 重建序列(中等):拓扑排序是否唯一
7.2层序遍历搜索
一般用于求最短、最小的路径或者层序遍历。
Lintcode611 · 骑士的最短路线(中等)
133. 克隆图(中等)
7.3连通块问题
该类题型既可以用深搜也可以广搜,但尽量用广搜。
200. 岛屿数量(中等)
8.分治法求解二叉树问题
99%的二叉树题型都可以用分治法解决,因此一下子想不到思路,就用分治法。
用分治法求解二叉树问题可以分为三类:
(1)二叉树上求值,求路径
(2)二叉树结构变化
(3)二叉查找树
8.1二叉树上求值,求路径
面试题 04.04. 检查平衡性(简单)
257. 二叉树的所有路径(简单)
112. 路径总和(简单)
剑指 Offer II 049. 从根节点到叶节点的路径数字之和(中等)
8.1.1最近公共祖先(Lowest Common Ancestor, LCA)
可以采用分治解法,要是想不到,也可以求根节点到A、B节点的路径,再挨个匹配。
236. 二叉树的最近公共祖先(中等):无父指针,LCA一定存在
Lintcode88 · 最近公共祖先(中等):有父指针,LCA一定存在
Lintcode474 · 最近公共祖先 II(中等):无父指针,LCA一定存在
Lintcode578 · 最近公共祖先 III(中等):无父指针,LCA可能不存在
8.2二叉树结构变化
8.3二叉查找树BST
108. 将有序数组转换为二叉搜索树(简单)
Lintcode1524 · 在二叉搜索树中查找(简单):BST查找节点
701. 二叉搜索树中的插入操作(中等):BST插入节点
450. 删除二叉搜索树中的节点(中等):BST删除节点
669. 修剪二叉搜索树(中等)
Lintcode902 · BST中第K小的元素(中等)
剑指 Offer II 055. 二叉搜索树迭代器(中等)
Lintcode900 · 二叉搜索树中最接近的值(中等)
Lintdoe901 · 二叉搜索树中最接近的值 II(困难):求最接近target的k个值,可联想到二分查找
9.dfs
9.1 组合问题
17. 电话号码的字母组合(中等)
90 · k数和(二)(中等)
剑指 Offer II 080. 含有 k 个元素的组合(中等)
剑指 Offer II 081. 允许重复选择元素的组合(中等)
剑指 Offer II 082. 含有重复元素集合的组合(中等)
135 · 数字组合(中等)
9.2 排列问题
剑指 Offer II 083. 没有重复元素集合的全排列(中等)
剑指 Offer II 084. 含有重复元素集合的全排列 (中等)
剑指 Offer 38. 字符串的排列(中等)
10.哈希表
Lintcode 685 · 数据流中第一个唯一的数字(简单)
Lintcode 960 · 数据流中第一个独特的数 II(中等)
146. LRU 缓存(中等)
11.堆
面试题40. 最小的k个数(简单)
剑指 Offer II 059. 数据流的第 K 大数值(简单)
263. 丑数(简单,虽然不用堆,但为了丑数II还是放进来了)
264. 丑数 II(中等)
1201. 丑数 III(中等)
215. 数组中的第K个最大元素(中等)
347. 前 K 个高频元素(中等)
973. 最接近原点的 K 个点(中等)
23. 合并K个升序链表(困难)