LeetCode268 缺失數字

2022-06-22 05:12:18 字數 1301 閱讀 2265

給定乙個包含 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 所以...