TGViewer
Яндекс Практикум. Программирование и анализ данных Яндекс Практикум. Программирование и анализ данных @practicumtech · 11.2K subscribers
Post #681 3.35K
Возвращаемся с оптимальным решением задачи из предыдущего поста от Саввы:

int FindSingleNumber(const vector<int>& nums) {
int result = 0;

for (int n : nums) {
result ^= n;
}

return result;
}


Такой способ позволяет решить за O(n) по времени и O(1) по памяти.
Это возможно с помощью оператора XOR — исключающее ИЛИ.
Числа состоят из байтов, а байты из битов. XOR работает с битами двух чисел и возвращает в результате третье число. Операция производится поразрядно по одному биту из каждого числа.

XOR вернёт 1, если только один бит равен 1. Получится вот так:

A B C
0 0 0
1 0 1
0 1 1
1 1 0


На примере вот такого вектора: {12, 11, 12} рассмотрим что будет происходить. Покажем только 4 первых бита:

Изначально result равен нулю, значит:
0 ^ 12 — 0000 ^ 1100 = 1100
1100 ^ 11 — 1100 ^ 1011 = 0111
0111 ^ 12 — 0111 ^ 1100 = 1011

В конце получился 1011, это 11 в двоичной системе исчисления.
Первое число просто присвоилось переменной result, а далее биты другого числа вычитались из него. После второго числа в переменной было число 0111 — число 7. Если бы не условие, что все числа будут повторяться дважды, кроме одного, то наличие числа 7 в векторе всё бы испортило и превратило число назад в 0. Второе повторение того же числа (необязательно даже последовательное) отменяет первую операцию. А так как одно число повторяется только один раз, то его никто не компенсировал, и оно осталось храниться в результате.

Битовые операции используются в разных трюках. Попробуйте решить эту задачу менее оптимальным способом по памяти, например с использованием множества или словаря.
  • 😱 8
  • 👍 7
  • ❤ 2
More from @practicumtech
  1. Oct 12, 2026upd: Практикум работает! Мы знаем, сколько стоит за каждым шагом в обучении: время, усилия…
  2. Oct 7, 2026Как ИИ читает рукописи и синтезирует речь Нейросети читают почерк не хуже человека, а гово…
  3. Oct 5, 2026Чем занимается ИИ-инженер и что изменилось с приходом LLM🔖 Антон Моргунов — инженер по ма…
  4. Sep 30, 2026Напоминаем, на каких курсах с нуля начинается обучение в первой половине октября. Если ище…
  5. Sep 29, 2026Воркшоп «ИИ для программирования» В новом сезоне практических видео эксперты Практикума ра…
  6. Sep 28, 2026СТО Практикума о том, как ИИ меняет обучение и профессию разработчика Делимся разговором с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →