Скользящее окно (sliding window) работает с непрерывным куском массива или строки. При сдвиге на шаг один элемент входит, один выходит, поэтому ответ не считают заново, а обновляют за O(1). Это частный случай техники двух указателей для непрерывных подмассивов.
![Окно длины 3 скользит по [2, 1, 5, 1, 3, 2]](img/lessons/algorithms/sliding-window-fixed-sums.svg)
Окно фиксированной длины
Задача: максимальная сумма k подряд идущих элементов. Перебор считает сумму каждого окна заново: (n - k + 1) * k сложений, то есть O(nk). При сдвиге окна новая сумма равна старая + a[i] - a[i - k].
def max_sum_k(a, k):
window = sum(a[:k]) # first window
best = window
for i in range(k, len(a)):
window += a[i] - a[i - k] # enter a[i], leave a[i - k]
best = max(best, window)
return best