LeetCode-singleNumber-只出現一次的數字

描述:

給定一個整數數組,除了某個元素外其他元素均出現兩次。請找出這個只出現一次的元素。算法

備註:數組

你的算法應該是一個線性時間複雜度。 你能夠不用額外空間來實現它嗎?性能

實現:

#個人實現方法:利用count找出元素的個數,若是個數爲1的就是要找的
class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in nums:
            n  = nums.count(i)
            if n ==1:
                return i
可是這個方法的時間超時了,達不到題目的性能要求

能夠利用Counter,能夠將list轉化成,list裏面的value對應個數的字典
例如:numss = [2,2,1,1,1,3]
{1: 3, 2: 2, 3: 1}code

from collections import Counter


class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        dict_nums = dict(Counter(nums))
        nums_list = dict_nums.keys()
        for i in nums_list:
            if dict_nums[i]==1:
                return i

樓下回復大神提示說能夠先對list進行排序:想到一種方法:排序以後進行比較:排序

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        
        if len(nums)==1:
            return nums[0]
        else:  
            if nums[0] != nums[1]:
                return nums[0]

            elif nums[len(nums) - 1] != nums[len(nums) - 2]:
                return nums[len(nums) - 1]



            else:
                for n in range(len(nums)):
                    if nums[n + 2] != nums[n + 1] and nums[n+2] != nums[n+3]:
                        return nums[n + 2]

根據大牛提示的每一個元素異或的方式:
因爲A XOR A = 0 且 ((A^A) ^ (B^B) ^ (C^C) ^ (D^D) ^ E) = ((0^ 0 ^ 0 ^ 0 ^ E) =E
直接把整個數組異或運算,最後的出來的就是隻出現一次的數字了。io

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        ss = 0
        for i in nums:
            ss = ss^i
        return ss
相關文章
相關標籤/搜索