题目:
Given an array of numbers nums
, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5]
, return [3, 5]
.
Note:
- The order of the result is not important. So in the above example,
[5, 3]
is also correct. - Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
题意:
给定数组nums,其中只有两个元素出现一次,其他元素都出现两次,写一个函数,找出这两个只出现一次的元素。
要求用线性时间复杂度,同时只使用常数个空间单元。
代码:
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
if n <= 2 :
return nums
else :
nums.sort() #对nums排序
count = 0 #记录出现一次的元素个数
res = [] #存储出现一次的元素
i = 0
while i < n-1 :
if nums[i] == nums[i+1] :
i += 2
else :
res.append(nums[i])
count += 1
i += 1
if count == 2 :
return res
res.append(nums[n-1]) #如果此时还没有返回,说明另一个只出现一次的元素在数组的最后一个位置
return res
笔记:
表示时间复杂度不符合要求,但是该方法的运行时间真是挺快的
网上查看了其他大神的算法,大多是用按位异或运算,然后根据异或结果反推出两个只出现一次的元素的。