寻找落单数

题目 【寻找落单数】给一个整数数组,其中除了只有一个数只出现一次以外,其他每一个数都出现两次。找出这个数。
注意:能否不使用额外空间?
解法 思路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

    推荐阅读