题目描述
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例
示例 1:
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
- 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
- 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
解答方法
方法一:哈希表
思路
建立一个值到频率的映射关系的哈希表,返回频率为 1 的数字。
代码
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
dic = collections.Counter(nums)
res = []
for i in dic:
if dic[i] == 1:
res.append(i)
return res
时间复杂度
O(n)
空间复杂度
O(n),哈希表所使用的空间。
方法二:位运算
思路
代码
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
tmp = 0
for num in nums:
tmp ^= num
diff = tmp &(-tmp)
x = 0
for num in nums:
if num & diff:
x ^= num
return [x, tmp ^ x]
时间复杂度
O(n)
空间复杂度
O(1)
网友评论