美文网首页
136. 只出现一次的数字(easy)

136. 只出现一次的数字(easy)

作者: genggejianyi | 来源:发表于2019-06-09 20:46 被阅读0次

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
    说明:
    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
    示例 1:
    输入: [2,2,1]
    输出: 1
    示例 2:
    输入: [4,1,2,1,2]
    输出: 4

    • show the code:
    class Solution:
        def singleNumber(self, nums: List[int]) -> int:
            a = 0
            for i in nums:
                a ^= i
            return a
    
    • 此题可以联想到很多方法,其中有暴力法:两次遍历,寻找只出现过一次的数,复杂度为O(n^2)
    • 有哈希法,维护一个字典存储之前出现过的数字,直到找出之前没出现过的数字:即只出现一次的数字。时间和空间复杂度都为O(n)
    • 但是题目要求线性时间复杂度而且不使用额外空间,所以以上两种方法都不能AC,答案有一种位运算的方法,即异或^,此符号表示两个数字二进制每位数相同的则为0,不同则为1,所以马上推出两个相同的数字异或的结果是0,0与任何数字异或的结果都是那个数字自身,所以我们只需要遍历一遍即可得出结果。非常简单,也非常牛逼。

    相关文章

      网友评论

          本文标题:136. 只出现一次的数字(easy)

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