题目描述:
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
思路:
1、所有的数字做^,就能把只出现两次的那两个数字不一样的位数显示出来,因为a ^ a = 0
2、a & (-a) 能保留最后一位a不为0的1,剩下的全都归零
代码:
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
bitmask = reduce(lambda x,y:x^y , nums,0)
diff = bitmask & (-bitmask)
x= 0
for i in nums:
if i & diff:
x ^= i
return (x,bitmask^x)
收获:
在x ^= i中,必须要给x赋予初值,因为此时的含义是包含diff的数字全部异或一遍,不能单纯给x赋值,也就是不能写成 x = i