给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
leetcode136. 只出现一次的数字的进阶版,可以参考剑指offer40.数组中只出现一次的数字:
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
res = 0
for num in nums:
res ^= num # 全部求异或
first_one = 0 # 找从右到左第一个不同的位置
while res&1 != 1:
res >>= 1
first_one += 1
a, b = 0, 0
for num in nums:
if (num>>first_one)&1:
a ^= num
else: # 根据这一位的不同分别异或
b ^= num
return [a, b]