算法基础:滑动窗口 (Sliding Window)
8/10/24About 2 min
什么时候用滑动窗口?
当题目要求在连续区间内统计、求极值或寻找最短/最长子数组时,滑动窗口是非常高效的选择。
固定长度窗口
窗口大小固定为 k,每次右移一步并更新窗口内的统计值。
可变长度窗口
维护左右指针:右指针扩展窗口,左指针收缩窗口,确保窗口满足条件。
常见模板
int left = 0;
int right = 0;
int best = 0;
while (right < n) {
add(a[right]);
right++;
while (!valid()) {
remove(a[left]);
left++;
}
best = max(best, right - left);
}经典题型
- 最短子数组: 满足和/频次条件的最短区间。
- 最长子数组: 满足限制条件的最长区间。
- 区间统计: 固定窗口内的平均值、最大最小值等。