LeetCode.268. 缺失數字
阿新 • • 發佈:2018-12-13
給定一個包含 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)