题目:
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
思路:
利用异或的性质(同为0,异为1),将两个数分别置于两类中。
解答:
时间复杂度:O(n)
空间复杂度:O(1)
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
x=0
for num in nums:
x^=num
#求s中最低位1和其之后的0所构成的数
tbit=x&(-x)
#将不同的两个数分别置于两类中
type1=0
type2=0
for num in nums:
#第t位为1
if num&tbit:
type1^=num
else:
type2^=num
return [type1,type2]