寻找落单数

题目


给一个整数数组,其中除了只有一个数只出现一次以外,其他每一个数都出现两次。找出这个数。
注意:能否不使用额外空间?

解法


思路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

你可能感兴趣的:(寻找落单数)