一组数据[1, 2, 1, 3, 2, 5],只有两个数是不重复的,其余数都出现了两次,求不重复的两个值

扩展知识:

异或运算符”∧”,它的规则是若参加运算的两个二进位同号,则结果为0(假)异号则为1(真) 即 0∧0=0,0∧1=1, 1^0=1,1∧1=0

解体思路:

如果其中只有一个数字不重复,很好解决,直接来一轮异或,得到的值就是不重复的值

先将数组所有元素进行一次异或运算,可以得到没有重复的那两个值。。。。

class Solution(object):
def singleNumber(self, nums):
acc = 0
for i in nums:
acc ^= i

print(bin(acc))
print(len(bin(acc)))
n = len(bin(acc)) - 3
print('n=%d' % n)
a, b = 0, 0
for i in nums:
if i >> n & 1:
a ^= i
else:
b ^= i

print('a=%d,b=%d' % (a,b))
list = [1, 2, 1, 3, 2, 5]
s = Solution()
s.singleNumber(list)

打印:

0b110
5
n=2
a=5,b=3