文章目录
题目要求
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
解题思路
分组异或
class Solution(object):
def singleNumbers(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
# 找到异或结果
temp = reduce(lambda x, y: x ^ y, nums)
# 找到一个不为零的异或结果位
bit = 1
while bit & temp == 0:
bit <<= 1
# 分组异或
res = [0, 0]
for num in nums:
if num & bit:
res[0] ^= num
else:
res[1] ^= num
# 返回结果
return res