双指针
- 合并两个有序数组<简单>
- 三数求和<中等>
- 最长回文子串<中等>。中心扩展,或动态规划
- 最短无序子数组<中等>。中间 dirty 数组加两侧边缘值或者借助单调队列
快慢指针
- 数组去重
- 回文链表
- 最多删除一个字符得到回文
滑动窗口
滑动窗口可以用来解决寻找满足一定条件的连续区间的问题。由于区间连续,因此当区间变化时,可以利用旧有的计算结果进行剪枝,从而减少计算量。例如“满足 xx 的最 x 的子数组”问题就可以用滑动窗口解决
- 最长不含重复字符的子字符串
- 滑动窗口的最大值(单调队列)<困难>
- 难点:如何在每次窗口滑动后,将 “获取窗口内最大值” 的时间复杂度从 O(k)O(k) 降低至 O(1)O(1)
- 最小覆盖子串