Все темы
133

Единственный элемент без пары

Tier 2Закрыто

Где применяется

1. Задача

На складе каждую посылку сканируют дважды: на входе и на выходе. За день в журнале сканов каждый ID встречается ровно два раза. Исключение одно: посылка потерялась, и её ID записан всего раз. Нужно найти этот ID среди миллиона сканов.

Надёжный способ: завести карту счётчиков, посчитать, сколько раз встретился каждый ID, и найти тот, у которого счётчик равен 1. Это работает, но требует O(n) памяти: миллион счётчиков ради одного числа.

Пара свойств операций над битами даёт тот же ответ одной строкой и с O(1) памяти. Об этих свойствах и пойдёт речь.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

Как узнать

Битовые манипуляции (Bit manipulation)

Эти слова в условии значат этот паттерн

  • найти единственное или уникальное число через XOR
  • установить, снять, переключить или проверить бит
  • упаковать много флагов да/нет в одно целое число
  • подсчёт установленных битов или проверка степени двойки

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

Одна операция стоит O(1) на 32-битном значении. Проход по битам это O(32), то есть константа.

На LeetCode

Задачи, где одно число пропало или осталось без пары, и быстрые проверки младшего бита. XOR сокращает равные числа, x & (x-1) гасит младший единичный бит, а x & -x оставляет только его.

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