Что такое метод двух указателей и скользящее окно?
Рекурсия, жадные алгоритмы и ДП
Два указателя и скользящее окно — приёмы обработки массивов и строк за O(n): указатели движутся только вперёд, и каждый элемент обрабатывается константное число раз.
Два указателя
- С противоположных концов: пара с заданной суммой в отсортированном массиве, проверка палиндрома.
- Быстрый и медленный: удаление дубликатов in-place, поиск цикла в списке (алгоритм Флойда).
Скользящее окно
Окно [left, right] расширяется вправо, пока условие выполняется, и сжимается слева, когда оно нарушается:
const longestUnique = (s) => {
const seen = new Set();
let left = 0, best = 0;
for (let right = 0; right < s.length; right++) {
while (seen.has(s[right])) seen.delete(s[left++]); // сжимаем слева
seen.add(s[right]); // расширяем вправо
best = Math.max(best, right - left + 1);
}
return best;
};Классика: самая длинная подстрока без повторов, максимальная сумма подмассива длины k.
Почему это O(n)
Каждый указатель проходит массив один раз — суммарно не больше 2n операций.
Коротко для собеседования
Указатели движутся только вперёд, поэтому задачи на подотрезки решаются за O(n) без перебора пар. Приём требует монотонного условия окна: с отрицательными числами окно на сумму ломается, и берут префиксные суммы.