Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Два указателя (с концов)

O(n)

Два индекса стартуют по краям отсортированного массива и идут навстречу, на каждом шаге решая, какую сторону подвинуть.

Сигналы

отсортированный массив (или можно отсортировать)найти пару/тройку с заданной суммойсжать с обоих концов (контейнер, площадь)проверка палиндрома

Шаблон

function twoPointers(arr, target) {
    let lo = 0;
    let hi = arr.length - 1;
    while (lo < hi) {
        const sum = arr[lo] + arr[hi];
        if (sum === target) return [lo, hi];
        if (sum < target) lo++;
        else hi--;
    }
    return null;
}

Похоже, но не то

  • Скользящее окно: Окно держит непрерывный отрезок и растит/сужает его по условию. Указатели с концов сходятся к одному ответу (пара, площадь) и никакой отрезок не хранят.
  • Хеш-множество / словарь: Хеш ищет дополнение в неотсортированных данных за O(n) времени, но O(n) памяти. Два указателя берут, когда массив отсортирован и важна O(1) память.

n до 1e5..1e6 и массив отсортирован -> O(n): один линейный проход, каждый указатель делает не больше n шагов. O(1) доп. память.

Изучить этот паттерн