Python-курс
🧩 Алгоритмические паттерны

Скользящее окно и префиксные суммы

Подотрезки массива без повторного пересчёта.

~45 минСредний 3 урока

Скользящее окно

Когда задача про непрерывный подотрезок (подстроку, окно фиксированной или переменнойИменованное хранилище для значения. Имя связывается со значением через присваивание: x = 5. длины), наивное решение перебирает все подотрезки — O(n²). Скользящее окно держит «рамку» [left, right] и двигает её правый край, добавляя новый элемент, а левый — когда нужно сжать окно. Каждый элемент входит и выходит из окна один раз → O(n).

2 1 5 2 3 1 left right окно суммы = 1 + 5 + 2 = 8
Сдвигаем right (добавляем элемент), сжимаем left (убираем) — сумма обновляется за O(1).
max-window-sum.py

Ключевой трюк: при сдвиге окна не пересчитываем сумму заново, а корректируем — прибавляем вошедший элемент и вычитаем вышедший. Это превращает O(n·k) в O(n).

Шаг 1 из 8