Sürüşən pəncərə (sliding window) massivin və ya sətrin ardıcıl hissəsi üzərində işləyən texnikadır. Pəncərəni bir addım sürüşdürəndə bir element daxil olur, bir element çıxır; ona görə cavabı sıfırdan hesablamaq əvəzinə O(1)-də yeniləyirik. Bu, iki göstərici texnikasının ardıcıl alt-massivlər üçün xüsusi halıdır.
![Uzunluğu 3 olan pəncərə [2, 1, 5, 1, 3, 2] üzərində sürüşür](img/lessons/algorithms/sliding-window-fixed-sums.svg)
Sabit uzunluqlu pəncərə
Məsələ: k ardıcıl elementin ən böyük cəmi. Brute force hər pəncərənin cəmini yenidən hesablayır: (n - k + 1) * k toplama, yəni O(nk). Pəncərəni sürüşdürəndə isə yeni cəm köhnə + a[i] - a[i - k] olur.
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