题目
给一个整数数组,其中除了只有一个数只出现一次以外,其他每一个数都出现两次。找出这个数。
注意:能否不使用额外空间?
解法
思路1 集合
遍历数组,用一个集合保存出现过1次的元素,若出现第二次则删除,最后集合剩下的一个值即为所求。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l = set([])
for i in nums:
if i not in l:
l.add(i)
else:
l.discard(i)
return l.pop()
思路2 求差
2∗(a+b+c)−(a+a+b+b+c)=c
用代码表示即为
2 * sum(set(nums)) - sum(nums)
思路3 异或 (原地算法)
所有数进行异或,即得所求
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0
for i in nums:
a ^= i
return a
网友评论