正文
滑动窗口(Sliding Window)是一种在数组或字符串上执行操作的优化技术。它将嵌套循环的问题转化为单个循环,从而显著降低时间复杂度。
算法模板(固定窗口大小)
1 | fun slidingWindow(nums: IntArray, k: Int): Int { |
使用说明
适用场景:
- 固定窗口:给定窗口大小 $k$,求最大/最小和、平均值等。
- 可变窗口:寻找满足特定条件的最长/最短子数组(通常配合双指针
left,right使用)。
核心优势:
- 避免了重复计算窗口重叠部分的值。
- 时间复杂度通常为 $O(N)$。
注意点:
- 注意边界条件,如数组长度小于 $k$ 的情况。
- 如果是求平均值,注意浮点数转换。
- 对于可变窗口,通常逻辑是:右边界右移增加元素 -> 窗口不满足条件时左边界右移移除元素。