给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
1、结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
2、你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
"""
1、计算a_xor_b
2、取出a_xor_b中任意一位1,用flag_bit标记
3、对flag_bit位为0和1的值分别在a_xor_b上进行异或运算
4、不妨设 b在flag_bit位置的值为1,
则a = a_xor_b ^ b ^(……),b = a_xor_b ^ a ^(……),括号内的异或运算为0
"""
a_xor_b = 0
for num in nums:
a_xor_b = a_xor_b^num
flag = 1
while flag & a_xor_b ==0:
flag = flag<<1
a = b = a_xor_b
for num in nums:
if num & flag == 0 :
a = a^num
else:
b = b^num
return [a,b]