固定长度滑动窗口

基本概念

固定长度滑动窗口算法(Fixed Length Sliding Window):在数组 / 字符串上维护一个长度固定的窗口,通过不断向右滑动窗口,实时更新窗口内的数据,并根据题目要求动态维护最优解。

算法步骤

假设窗口大小为window_size,步骤如下

  1. 定义两个指针left和right,初始都指向序列起始位置(left=0,right=0),区间[left,right][left,right]表示当前窗口
  2. 不断右移right,将元素加入 窗口(window.append(nums[right]))(如window.append(nums[right]))
  3. 当窗口长度达到window_size(right-left+1>=window_size)时:
    1. 判断窗口内元素是否满足题目要求,如果满足,更新答案
    2. 右移left,保持窗口长度不变
  4. 重复上述过程,直到right 遍历完整个数组

内部实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1. 定义两个指针left和right,初始都指向序列起始位置(left=0,right=0),区间$[left,right]$表示当前窗口
left,right=0,0

#2. 不断右移right,将元素加入 窗口(window.append(nums[right]))
while right<len(nums):
window.append(nums[right])
#3. 当窗口长度达到window_size(right-left+1>=window_size)时:
if right-left+1>=window_size:
#1. 判断窗口内元素是否满足题目要求,如果满足,更新答案

#2. 右移left,保持窗口长度不变
window.popleft()
left+=1
#4. 重复上述过程,直到right 遍历完整个数组
right+=1

应用场景:

窗口大小固定,通常用于统计或查找长度为 k 的区间性质。