1. 程式人生 > >LeetCode.268. 缺失數字

LeetCode.268. 缺失數字

給定一個包含 0, 1, 2, …, n 中 n 個數的序列,找出 0 … n 中沒有出現在序列中的那個數。

示例 1:

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

示例 2:

輸入: [9,6,4,2,3,5,7,0,1] 輸出: 8

說明:

你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?

思路1:

異或。對0-n進行異或將得到某一個確定的數字x,對這個陣列的所有數字進行異或將得到一個確定的數字y,對x和y進行異或將得到這個缺失的數字。為了演算法簡潔,過程可以調整。

程式碼1:

class Solution:
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n=len(nums)
        for i in range(n):
            n^=nums[i]^i
        return n

分析1:

時間複雜度O(n),空間複雜度O(1)

思路2:

使用內建函式sum。將0-n的數字相加將得到一個數字a,將整個陣列求和將得到一個數字b,兩者之差即為所求。

程式碼2:

class Solution:
    def missingNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        return n * (n + 1) // 2 - sum(nums)

分析2:

時間複雜度O(n),空間複雜度O(1)