美文网首页
寻找落单数

寻找落单数

作者: 拔丝圣代 | 来源:发表于2018-02-13 09:22 被阅读0次

    题目


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

    解法


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

    相关文章

      网友评论

          本文标题:寻找落单数

          本文链接:https://www.haomeiwen.com/subject/qthjtftx.html