1. 程式人生 > >leetcode【陣列】 2 只出現一次的數字 -python3

leetcode【陣列】 2 只出現一次的數字 -python3

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:

你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

示例 1:

輸入: [2,2,1]
輸出: 1

示例 2:

輸入: [4,1,2,1,2]
輸出: 4

試解:

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

輸出null,錯誤原因:while迴圈語句的條件每次都會更新,迴圈還未該結束時,i已經增大很多,小於len(nums)了,故可以在while之前設定一個變數等於初始的len(nums),或者改用for語句:

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        for i in range(len(nums)-1):
            if len(nums) == 1:
                return nums[0]
            if nums[0] == nums[1]:
                nums.remove(nums[0])
                nums.remove(nums[0])
            else:
                return nums[0]