2014-11-24 3 views
2

Дается целочисленный массив. В этом массиве 3 уникальных номера имеют число вхождений как четное. У остальных есть только одно событие. Есть ли способ найти эти числа, используя логику XOR. Также данный массив имеет n + 3 элемента. Все элементы массива находятся в диапазоне от 1 до n.Чтобы найти три уникальных числа, число которых равно числу

для например: обр = {4, 2, 4, 5, 2, 3, 1, 5}, где п = 5 здесь уникальные номера с четными появления являются 2, 4 и 5

я сделал XOR чисел массива вместе с xor диапазона от 1 до n. Это дало номер, который является ответом XOR последних трех уникальных номеров. В случае двух чисел мы можем проверить бит набора и продолжить поиск чисел. Но как насчет трех чисел. Есть какой-либо способ сделать это.

Я знаю, что хеширование может быть использовано для решения проблемы. Я ищу подход XOR для решения проблемы.

+1

Я думаю, вы можете использовать [этот ответ на очень похожий вопрос] (http://stackoverflow.com/a/3010534/1009831). Он дает линейное время O (1) пространство (с постоянным массивом) алгоритм с хорошим объяснением. –

+0

Да, я думаю, что небольшая модификация этого подхода должна работать. Попробуем – rocker

ответ

-1

Xor может помочь вам, потому что:

XOR (Exclusive Or) truth table: 
      A B XOR 
      0 0 0 
      1 0 1 
      0 1 1 
      1 1 0 

Так что вы можете сделать, это:

A. Divide the elements that are occurring more than ones to sets 
    of the same value 
B. Then xor all elements in each of those sets 
C. If the result is zero than you can return that element to the end set 

Если вы хотите только 3 цифры, чем когда предыдущий набор имеет размер трех вы можете вернуть его но вы можете использовать эту логику для вычисления любого четного числа элементов в группе.

+0

На шаг А, вы имеете в виду создание отдельного ведра для каждого номера? Это похоже на хеширование. – rocker

+0

{{4,4}, {5,5}, {2,2}, {1}, {3}} не нужно хешировать на таких небольших данных, просто используйте структуру данных, допускающую повторение групп, возможно, int Array. Набор не позволяет повторять иногда. это один делаем. массив массивов будет работать здесь – sivi

+0

Вы используете дополнительную структуру данных, которая может иметь порядок n (сложность пространства). Это тот же случай, что и использование хэширования. – rocker

Смежные вопросы