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

Два указателя

Два бегунка вместо вложенных циклов.

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

Идея двух указателей

Многие задачи на массивах «в лоб» решаются вложенными циклами — перебором всех пар, это O(n²). МетодФункция, привязанная к объекту и вызываемая через точку: text.upper(). двух указателей часто убирает один циклКонструкция, повторяющая блок кода: for перебирает элементы, while — пока условие истинно.: мы заводим два индексаНомер позиции элемента в последовательности. В Python нумерация с нуля: первый элемент — индекс 0. и двигаем их навстречу друг другу или в одном направлении, опираясь на свойства данных. Получается один проход — O(n).

Классический случай — отсортированный массив, в котором нужно найти пару с заданной суммой. Ставим один указатель в начало (left), другой в конец (right) и смотрим на сумму краёв.

1 3 4 6 8 9 11 left → ← right сумма краёв = 1 + 11 = 12
Если сумма больше цели — двигаем right влево; если меньше — left вправо.
two-sum-sorted.py

Почему это работает: массив отсортирован. Если сумма краёв больше цели, самый правый элемент слишком велик — уменьшаем правую границу. Если меньше — увеличиваем левую. Каждый шаг сдвигает один из указателей, поэтому всего проходов не больше n.

Шаг 1 из 7