Slenkantis langų metodas palaiko tiesią eilutę (langą) virš masyvo arba eilutės ir jį slenka, o ne perskaičiuoja iš naujo, sprendžiant daugelį submasyvo/poeilutės uždavinių per O(n).
Idėja
Platinkite langą, perkeldami dešinįjį kraštą; susitraukite jį, perkeldami kairįjį kraštą, kai pažeidžiama sąlyga. Iš naujo naudokite ankstesnį skaičiavimą, o ne peržiūrėkite iš naujo.
Pavyzdys: didžiausia bet kurio k dydžio lango suma
():
window = (arr[:k])
best = window
i (k, (arr)):
window += arr[i] - arr[i - k]
best = (best, window)
best
max_window_sum([, , , , , ], )
