解题方法分类
1. 滑动窗口。
2. 双指针。
3. 快慢指针。
4. 区间合并。
5. 循环排序。
6. 原地反转链表。
7. 树上的BFS。
8. 树上的DFS。
9. 双堆。
10. 子集。
11. 变种二分。
12. 最大前K个元素。
13. K-路归并。
14. 拓扑排序。
1. 滑动窗口。
2. 双指针。
3. 快慢指针。
4. 区间合并。
5. 循环排序。
6. 原地反转链表。
7. 树上的BFS。
8. 树上的DFS。
9. 双堆。
10. 子集。
11. 变种二分。
12. 最大前K个元素。
13. K-路归并。
14. 拓扑排序。
1. 滑动窗口。
2. 双指针。
3. 快慢指针。
4. 区间合并。
5. 循环排序。
6. 原地反转链表。
7. 树上的BFS。
8. 树上的DFS。
9. 双堆。
10. 子集。
11. 变种二分。
12. 最大前K个元素。
13. K-路归并。
14. 拓扑排序。
1. 滑动窗口。
- 这个问题的输入是一些线性结构:比如链表呀,数组啊,字符串啊之类的
- 让你去求最长/最短子字符串或是某些特定的长度要求
常见的问题有:
- 窗口大小为K的最大子数组和(简单)
- 拥有K个不同的字母的最长子串(中等)
- 字符串的同字母异序词(困难)
2. 双指针。
识别使用双指针的招数:
- 一般来说,数组或是链表是排好序的,你得在里头找一些组合满足某种限制条件
- 这种组合可能是一对数,三个数,或是一个子数组
可以放双指针大招的题目:
- 输出一个排好序的数组的平方数组(简单)
- 3-Sum(中等)
- 比较两个字符是否相等,字符中包括得有退格键(中等)
3. 快慢指针。
咋知道需要用快慢指针模式勒?
- 问题需要处理环上的问题,比如环形链表和环形数组
- 当你需要知道链表的长度或是某个特别位置的信息的时候
那啥时候用快慢指针而不是上面的双指针呢?
- 有些情形下,咱们不应该用双指针,比如我们在单链表上不能往回移动的时候。一个典型的需要用到快慢指针的模式的是当你需要去判断一个链表是否是回文的时候。
快慢指针可秒的题目:
- 链表是否有环(简单)
- 链表是否满足回文(中等)
- 环状数组中检测环(困难)
4. 区间合并。
怎么识别啥时候用合并区间模式呀?
- 当你需要产生一堆相互之间没有交集的区间的时候
- 当你听到重叠区间的时候
合并区间的题目:
- 区间交集(中等)
- 最大化CPU负载(困难)
5. 循环排序。
咋鉴别这种模式?
- 这些问题一般设计到排序好的数组,而且数值一般满足于一定的区间
- 如果问题让你需要在排好序/翻转过的数组中,寻找丢失的/重复的/最小的元素
能用循环排序解的题:
- 需要数组中没出现的数字 (简单)
- 寻找最小的没出现的正整数 (中等)
6. 原地反转链表。
咱们怎么去甄别这种模式呢?
- 如果你被问到需要去翻转链表,要求不能使用额外空间的时候
这种模式的适用场景:
- 翻转链表中的一段(中等)
- 翻转每k个元素为一组的子链表段(中等)
7. 树上的BFS。
识别树上的BFS模式:
- 如果你被问到去遍历树,需要按层操作的方式(也称作层序遍历)
该模式可解的题:
- 二叉树层序遍历(简单)
- 之字形遍历(中等)
8. 树上的DFS。
识别树形DFS:
- 你需要按前中后序的DFS方式遍历树
- 如果该问题的解一般离叶子节点比较近。
树形DFS可破的题目:
- 树上所有路径上表示的数字的和(中等)
- 树中所有能形成目标和的路径(中等)
9. 双堆。
判断双堆模式的秘诀:
- 这种模式在优先队列,计划安排问题(Scheduling)中有奇效
- 如果问题让你找一组数中的最大/最小/中位数
- 有时候,这种模式在涉及到二叉树数据结构时也特别有用
典型问题:
- 找数字流中的中位数(中等)
10. 子集。
如果判断这种子集模式:
- 问题需要咱们去找数字的组合或是排列
子集模式适用的场景:
- 有重复元素的所有子集(简单)
- 通过改变大小写,找到所有可能的字符串排列(中等)
11. 变种二分。
变种二分可以解决的问题:
- 顺序未知的二分(可能翻转过了,简单)
- 无界排序数组的二分(中等)
12. 最大前K个元素。
识别最大K个元素模式:
- 如果你需要求最大/最小/最频繁的前K个元素
- 如果你需要通过排序去找一个特定的数
前K个元素模式的场景:
- 前K大的数(简单)
- 前K个最常出现的数字(中等)
13. K-路归并。
识别K路归并:
- 该问题的输入是排好序的数组,链表或是矩阵
- 如果问题让咱们合并多个排好序的集合,或是需要找这些集合中最小的元素
K路归并的题目:
- 合并K个排好序的链表(中等)
- K对数和最大(困难)
14. 拓扑排序。
拓扑排序模式识别:
- 待解决的问题需要处理无环图
- 你需要以一种有序的秩序更新输入元素
- 需要处理的输入遵循某种特定的顺序
拓扑排序的试炼场:
- 任务执行顺序安排(中等)
- 树的最小高度(困难)
0