1.题目详情
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。
2.解题思路
可以偷懒用python中的count计数,遍历列表,count完为2,return。
看了题解,用的异或
算法
先对所有数字进行一次异或,得到两个出现一次的数字的异或值。
在异或结果中找到任意为 11 的位。
根据这一位对所有的数字进行分组。
在每个组内进行异或操作,得到两个数字。
3.代码实现
count方法
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
arr = []
for i in nums:
if nums.count(i) == 1:
arr.append(i)
return arr
异或方法
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
ret = functools.reduce(lambda x, y: x ^ y, nums)
div = 1
while div & ret == 0:
div <<= 1
a, b = 0, 0
for n in nums:
if n & div:
a ^= n
else:
b ^= n
return [a, b]
4.知识点
–