foundation
Скользящее окно
Поддерживайте moving range, обновляйте aggregate state и shrink/expand по чёткому инварианту.
Sliding window поддерживает contiguous range и обновляет aggregate state при expand или shrink. Fixed windows имеют предсказуемое движение; variable windows требуют invariant вроде at most k distinct characters, sum not exceeding target или all required characters covered.
Компромисс: сравните время, память и сложность реализации до выбора структуры или паттерна.
На интервью: Хорошее объяснение называет, что хранится в window, когда двигается left pointer и почему каждый element входит и выходит максимум один раз.
Типовые ошибки: Negative numbers могут ломать sum-based shrink rules. Забытый decrement в frequency maps дает stale state. Nested while loops все еще могут быть O(n), когда movement monotonic.
Чеклист:
- Определите fixed или variable window.
- Поддерживайте aggregate state.
- Двигайте left по invariant.
- Объясните O(n) через monotonic movement.