美文网首页
leetcode 136. Single Number

leetcode 136. Single Number

作者: 咿呀咿呀呦__ | 来源:发表于2017-12-28 21:37 被阅读0次

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a = 0
        for i in nums:
            a ^= i
        return a

Concept

If we take XOR of zero and some bit, it will return that bit
a⊕0=a
If we take XOR of two same bits, it will return 0
a⊕a=0
a⊕b⊕a=(a⊕a)⊕b=0⊕b=b
So we can XOR all bits together to find the unique number.

Complexity Analysis:

Time complexity : O(n). We only iterate through nums, so the time complexity is the number of elements in nums.

Space complexity : O(1).

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        hash_table = {}
        for i in nums:
            try:
                hash_table.pop(i)
            except:
                hash_table[i] = 1
        return hash_table.popitem()[0]

Complexity Analysis:

Time complexity : O(n∗1)=O(n). Time complexity of for loop is O(n). Time complexity of hash table(dictionary in python) operation pop is O(1).

Space complexity : O(n). The space required by hash_table is equal to the number of elements in nums

相关文章

网友评论

      本文标题:leetcode 136. Single Number

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