Задания № 17, 25 · ЕГЭ

Поиск пары элементов

Как найти два элемента массива, удовлетворяющих условию
2 мин чтенияСложность: Обновлено 29 сентября 2026

Поиск пары элементов — это задача нахождения двух разных элементов массива, для которых выполняется заданное условие: например, сумма равна числу \(S\), один элемент больше другого или значения совпадают.

Поиск пары элементов
Поиск пары элементов — алгоритм перебора или более быстрого поиска двух элементов массива \(a_i\) и \(a_j\) с разными индексами \(i \ne j\), удовлетворяющих условию задачи. Результатом может быть сама пара, её индексы или количество подходящих пар.

Проще всего решить задачу с помощью перебора массива. Внешний цикл выбирает первый элемент, а внутренний — второй элемент, расположенный правее него. Так каждая пара индексов проверяется ровно один раз, и пара элемента с самим собой не рассматривается.

\[i = 0,1,\ldots,n-2;\qquad j = i+1,i+2,\ldots,n-1\]

При таком подходе число проверок равно \(\frac{n(n-1)}{2}\), поэтому временная сложность составляет \(O(n^2)\), а дополнительная память — \(O(1)\). Если массив отсортирован или допускается хранить уже встреченные значения, поиск иногда можно ускорить до \(O(n)\) или \(O(n\log n)\). Такой приём связан с методом двух указателей.

№
Пример: сумма равна S

Для массива \([4, 7, 1, 9]\) и \(S=10\) перебираем пары: \(4+7=11\), \(4+1=5\), \(4+9=13\), \(7+1=8\), \(7+9=16\), \(1+9=10\). Подходящая пара — элементы \(1\) и \(9\), находящиеся на индексах 2 и 3.

Псевдокод
for i от 0 до n - 2:
    for j от i + 1 до n - 1:
        if условие(a[i], a[j]):
            обработать пару i, j
!
Не путайте с поиском тройки

Пара состоит ровно из двух элементов. Если условие должно выполняться для трёх элементов, нужен отдельный алгоритм поиска тройки элементов. Также нельзя считать одну и ту же пару дважды: пары \((i,j)\) и \((j,i)\) одинаковы.

Проверьте себя

Какие индексы нужно выбирать во внутреннем цикле, если первый индекс равен \(i\)?

Главное за минуту

Главное

  • Пара элементов использует два разных индекса и удовлетворяет условию задачи.
  • Полный перебор с индексами \(j>i\) проверяет каждую пару ровно один раз и работает за \(O(n^2)\).
  • Для ускорения могут применяться сортировка или два указателя.