给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
flag = 0
#这个循环就是让nums里的元素都进行异或,最后得到两个只出现一次的数异或后的结果flag
for i in nums:
flag = flag ^ i
#找到那个flag中从右往左第一次为1的那个二进制的mask
mask = 1
while flag & mask == 0:
mask = mask << 1
a = 0
b = 0
for i in nums:
#这里让mask和nums里所有的元素进行与操作,要么为0,要么为1
#让a和要么为0的进行异或找到其中一个只出现一次的数
#让b和要么为1的进行异或找到其另一个只出现一次的数
if i & mask == 0:
a = a ^ i
else:
b = b ^ i
return [a,b]