我正在尝试解决这个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,并得到最低的非常见位,......
但我还有另一个想法:
我可以通过XOR得到X ^ Y所有数字;
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,或者即使这是可能的。
你能帮忙吗?
答案 0 :(得分:4)
你不能。
Bitwise XOR只是在没有进位的情况下添加。您可以轻松构建反例:
x 01 11
y 10 00
xor 11 11
1 + 2
,3 + 0
和1 ^ 2
,3 ^ 0
都有相同的结果。