题目描述:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
这道题我第一次看到是考虑建立一个dict,dict的key是数组的值,dict的val是该数字出现的次数,最后找到数字为1的就可以。代码如下:
class Solution(object):
def singleNumber(self, nums):
dic={}
for num in nums:
if num in dic:
dic[num]=2
else:
dic[num]=1
for item in dic:
if dic[item]==1:
return item
但是这样实现实际上需要额外建立一个dict,在空间上有一定损耗。
更巧妙的方法是使用异或操作,两个相同的数异或结果为0,两个不同的数异或结果为1,一个数跟0异或是这个数本身。
也就是说:
aba = b
所以可以定义一个整数,初始化为0,并用该数依次与列表中元素进行异或操作,最后的结果肯定就是只出现过一次的那个数!
代码如下:
class Solution():
def singleNumber(self, nums):
num = 0
for i in nums:
num ^= i
return num