- 将数组中的数字进行异或操作,则除了两个出现1次的数字外全变成0,得到x
- x中为1的位,是单独出现数a、b某位不同得到,即存在该位上一个为0,另一个必然为1
- x和-x进行与操作,可得到最低位的1
- 根据最低位1的不同,分成两组异或,可得单独出现的a、b
https://leetcode-cn.com/problems/single-number-iii/solution/fei-chang-rong-yi-li-jie-de-pythondai-ma-by-a-bai-/
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
bitmask = 0
#找到唯二出现了一次的数字
for num in array:
bitmask ^= num
#找到区分两个数字的一位
diff = bitmask & (-bitmask)
#找到这个位为1的数字
i = 0
for num in array:
if num & diff :
i ^= num
return [i,i^bitmask]