滑动窗口
滑动窗口,顾名思义,就是“滑动”的窗口。我们在处理数组的子区间问题(如求出数组 array 的某个子区间的长度)时,可以同时使用两个指针(也可以说是下标): start 和 end ,在这个数组中“圈出”一个窗口,并根据条件移动右边界 end 或左边界 start ,实现窗口的“滑动”。
这种算法能够将时间复杂度从O(n^2)优化为O(n),
滑动窗口有三种形式:固定长度窗口,最大窗口和最小窗口。
固定窗口
这是最简单的情况,此时滑动窗口的长度 length 固定为 end - start + 1 ,每次移动都将 end 和 start 加一,直到右边界碰到数组的边界 array.length:
LeetCode T643:子数组最大平均数 I
给你一个由
n个元素组成的整数数组nums和一个整数k。请你找出平均数最大且 长度为
k的连续子数组,并输出该最大平均数。任何误差小于
10^(-5)的答案都将被视为正确答案。
1 | class Solution { |
最大窗口
在这种情况下,窗口长度要在满足要求的情况下尽可能大,但是移动的逻辑和边界条件仍然为“每次移动都将 end 和 start 加一,直到右边界碰到数组的边界 array.length”
LeetCode T3090:每个字符最多出现两次的最长子字符串
给你一个字符串
s,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的 最大 长度。子字符串是字符串中连续的字符序列
1 | class Solution { |
最小窗口
在这种情况下,窗口长度则需要在满足要求的情况下尽可能小,但是移动的逻辑和边界条件仍然为“每次移动都将 end 和 start 加一,直到右边界碰到数组的边界 array.length”
LeetCode T209:长度最小的子数组
给定一个含有
n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于
target的长度最小的 子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度**。**如果不存在符合条件的子数组,返回0。
1 | class Solution { |
- 标题: 滑动窗口
- 作者: kk3TWT
- 创建于 : 2026-08-14 23:10:02
- 更新于 : 2026-09-06 13:37:04
- 链接: https://kk-is-very-happy.top/posts/50cab45/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。