В последовательности длины n, где n = 2k + 3, то есть есть k уникальных чисел, появившихся дважды и три цифры появились только один раз.
Вопрос: как найти три уникальных числа, которые появились только один раз?
например, в последовательности 1 1 2 6 3 6 5 7 7 три уникальных числа: 2 3 5.
Примечание: 3 <= n < 1e6, и число будет варьироваться от 1 до 2e9
Пределы памяти: 1000 КБ, это означает, что мы не можем сохранить всю последовательность.
Метод, который я попробовал (предел памяти превысил):
Я инициализирую дерево, и, читая в одном номере, я пытаюсь удалить его из дерева, если remove возвращает false (не найден), я добавляю его в дерево. Наконец, дерево имеет три числа. Он работает, но предел памяти превышает.
Я знаю, как найти одно или два таких числа, используя бит-манипуляции. Поэтому мне интересно, если
мы можем найти три, используя тот же метод (или какой-то метод аналогичный)?
Метод поиска одного/двух номеров (номеров) появился только один раз:
Если один номер появился только один раз, мы можем применить XOR к последовательности, чтобы найти его.
Если их два, мы можем сначала применить XOR к последовательности, затем разделить последовательность на 2 частей на один бит результата, который равен 1, и снова применить XOR к 2 частям, и мы найдем ответ.