2015-08-31 9 views
0

Я пытаюсь решить эту проблему leetcode: Given an array of numbers nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.Можно ли решить X и Y, зная X^Y и X + Y?

Я знаю стандартное решение для вычисления X^Y, и получить самый низкий необычный бит, ...

Но у меня есть еще одна идея:

Я могу получить X^Y посредством XOR всех чисел;

xored = 0 
for i in nums: 
    xored = xored^i 

Я также могу получить X + Y, добавляя каждый двоичный бит чисел в отдельности, а также модульным 2.

# pseudo-code 
bitvector = [0]* number of bits of integer 
for n in numbers: 
    for bit in bitvector: 
     bitvector[i] += n[bit] 
     bitvector[i] = bitvector[i]%2 

Но я не знаю, как получить X и Y, с X + Y и X^Y, или даже если это возможно.

Вы можете помочь?

+2

нет, вы не можете: http://stackoverflow.com/questions/25565626/determine-numbers-based-on-their-sum-and-xor – ymonad

+0

Попробуйте решить X^Y = X + Y = 1111b и убедитесь сами , –

+0

Как глупо от меня ... – NeoWang

ответ

4

Вы не можете.

Побитовое XOR - это просто дополнение без переноса. Вы можете легко построить контрпримеры:

x 01 11 
y 10 00 
xor 11 11 

1 + 2, 3 + 0 и 1^2, 3^0 все они имеют один и тот же результат.

+0

'2 + 2 == 4 + 0', но' 2^2! = 4^0'. Дополнение - xor с переносом. – amit

+0

@amit Моя точка, заданная 'x + y == 3' и' x^y == 3', невозможно получить уникальный ответ. –

+0

Я объясняю формулировку в объяснении, а не концепцию ответа или примера. – amit

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