细聊滑动窗口是什么意思?

摘要:前段时间忙于写系列文章,怒刷算法题的进度算是耽误了不少。刚好遇到了一道需要滑动窗口的题目,做完之后觉得挺有意思,有必要好好聊一下滑动窗口。 所谓滑动窗口(slide window)是一种优化算法的抽象概念,主要于解决数组、字符串等线性结构中
前段时间忙于写系列文章,怒刷算法题的进度算是耽误了不少。刚好遇到了一道需要滑动窗口的题目,做完之后觉得挺有意思,有必要好好聊一下滑动窗口。 所谓滑动窗口(slide window)是一种优化算法的抽象概念,主要于解决数组、字符串等线性结构中的子数组或子序列问题。它的整个思路是通过维护一个窗口(window)在数组上滑动,每次滑动一个单元距离,从而减少重复计算。 滑动窗口一般分为2种: 固定大小窗口:窗口的大小是固定的,通过移动窗口在数组或字符串上的位置来解决问题。例如:求数组种固定长度子数组的最大和。 可变大小窗口:根据条件动态增大或者缩小窗口。例如:求不超过给定和的最大子数组。 对于固定大小窗口问题,最典型的就是leetCode第三十题: 给定一个字符串 s 和一个包含多个长度相同的单词的数组 words,要求找出 s 中所有的起始索引,这些起始索引所对应的子串正好是 words 中所有单词的串联排列(顺序不限定,但每个单词必须用一次)。 示例: 输入: s = "barfoothefoobarman" words = ["foo", "bar"] 输出: [0, 9] 解释: 从索引 0 的子串是 "barfoo",它是 ["foo", "bar"] 的串联。 从索引 9 的子串是 "foobar",它也是 ["foo", "bar"] 的串联。
阅读全文