給定乙個包含 0, 1, 2, ..., n 中 n 個數的序列,找出 0 .. n 中沒有出現在序列中的那個數。
示例 1:
輸入: [3,0,1]
輸出: 2
示例 2:
輸入: [9,6,4,2,3,5,7,0,1]
輸出: 8
說明:
你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?
最直觀的思路是對資料進行排序, 然後依次掃瞄, 便能找出漏掉的數字, 但是基於比較的排序演算法的時間複雜度至少是 nlog(n) , 不滿足題目要求。
一種可行的方法是對從 0 到 n 求和,然後對 nums 求和,兩者之差就是缺失的數字,但是這種方式需要注意缺失的數是 0 的情況,即兩者之和相等時可以認定為缺失的數是 0 。
class solution:
def missingnumber(self, nums):
""":type nums: list[int]
:rtype: int
"""sum1 = 0
sum2 = 0
for i in range(0, len(nums)+1):
sum1 += i
for num in nums:
sum2 += num
if sum1 == sum2:
return 0
else:
return sum1 - sum2
異或運算的乙個重要性質是,相同的數異或得 0 ,不同的數異或不為 0 ,且此性質可以推廣到多個數異或的情形。
本題的解法如下,首先將 0 到 n 這些數進行異或運算,然後對輸入的陣列進行異或運算,最後將兩個結果進行異或運算,結果便是漏掉的數字, 因為其他數字在兩個陣列中都是成對出現的,異或運算會得到 0 。
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說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?思路 首先通過set將nums排序,然後通過乙...
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進行異或將得到某...
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說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?思路一 由於題目中的資料給定的是 0 n 所以...