1. 程式人生 > >leet137. 只出現一次的數字 II

leet137. 只出現一次的數字 II

題目:

給定一個整型陣列,除了一個元素只出現一次外,其餘每個元素都出現了三次。求出那個只出現一次的數。

注意:

你的演算法應該具有線性的時間複雜度。你能否不使用額外的記憶體來實現?

分析:

  1. 通過集合運算可以得到去除每個元素只出現一次的集合,計算集合和的3倍,減去原列表之和,即得到列表只出現一次的元素的兩倍;

程式碼:

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        return  (sum(set(nums)) * 3 - sum(nums)) / 2

思考:

  1. 想了好久為什麼是出現3次,會有什麼坑; 除了非重複元素出現偶數次,可以通過所有元素取異或得到唯一元素,沒有想到其他原因