寻找落单数

题目


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

解法


思路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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容