260. 只出现一次的数字 III
解法一:
3^5=6:
011
^ 101
------
110
说明3和5从右边第二位开始不同
6是0110
-6是取反加一:0110 -> 1001 -> 1010
6&-6=2:
0110
&1010
------
0010
因此6&-6一定能得到最右边的1最后更新于
3^5=6:
011
^ 101
------
110
说明3和5从右边第二位开始不同
6是0110
-6是取反加一:0110 -> 1001 -> 1010
6&-6=2:
0110
&1010
------
0010
因此6&-6一定能得到最右边的1最后更新于
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
diff = 0
for num in nums:
diff ^= num
diff &= -diff
res = [0, 0]
for num in nums:
if num & diff == 0: #分组
res[0] ^= num
else:
res[1] ^= num
return res