Два указателя на Python: как решать + 13 задач с проверкой

«Два указателя» (или *two pointers*) — это способ решать задачи про массивы и строки, где нужно что-то найти/посчитать для отрезков или пар элементов, не перебирая всё квадратично. Он часто встречается в задачах про «максимальный подряд идущий участок по ограничению» (как про бюджет на обеды), про подсчёт пар с условием разности/суммы, про слияние двух отсортированных списков (логов двух роботов), про поиск «слишком близких» значений.

Как распознать задачу под два указателя:

Суть приёма: держим два индекса l и r, которые задают текущий отрезок, и поддерживаем его характеристику (например, сумму). Двигаем r вперёд, пока можно, а когда условие нарушено — двигаем l, пока снова не станет хорошо. Так каждый индекс проходит массив максимум один раз, и вместо O(n^2) получается O(n).

С чего начать учиться:

Ниже — задачи с автопроверкой и разбором подхода: начни с простых окон, затем переходи к парам и слиянию.

Задачи по теме «Два указателя»

Смежные темы

Весь каталог задач

Куда дальше