固定长度滑动窗口

基本概念

不定长滑动窗口(Sliding Window):在数组 / 字符串上用两个指针动态维护一个可变长度的窗口,通过左右移动指针灵活调整窗口范围,实时维护最优解。

算法步骤

步骤如下

  1. 定义两个指针left和right,初始都指向序列起始位置(left=0,right=0),区间[left,right][left,right]表示当前窗口
  2. 不断右移right,将元素加入 窗口(window.append(nums[right]))(如window.append(nums[right]))
  3. 当窗口不满足条件时,不断移除,缩小窗口
  4. 重复上述过程,直到right 遍历完整个数组

内部实现:

1
2
3
4
5
6
7
8
9
10
11
12
#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. 当窗口不满足条件时,不断移除,缩小窗口
while
window.popleft()
left+=1
#4. 重复上述过程,直到right 遍历完整个数组
right+=1

应用场景:

窗口大小不固定,常用于查找满足条件的最长/最短区间。