268 缺失數字

2021-10-02 04:44:11 字數 974 閱讀 7013

排序,不多解釋,估計都能想到。

func

missingnumber

(nums [

]int

)int

if nums[0]

!=0for i :=

1; i <

len(nums)

; i++

}return-1

}

借用雜湊表

不多說,估計也都能想到

func

missingnumber

(nums [

]int

)int

for_

, v :=

range nums

for i, v :=

range m

}return-1

}

位運算 — 異或操作

異或運算(xor)滿足結合律,並且對乙個數進行兩次完全相同的異或運算會得到原來的數,因此我們可以通過異或運算找到缺失的數字。

我們知道陣列中有 n 個數,並且缺失的數在 [0…n]中。因此我們可以先得到 [0…n]的異或值,再將結果對陣列中的每乙個數進行一次異或運算。未缺失的數在 [0…n]和陣列中各出現一次,因此異或後得到 0。而缺失的數字只在 [0…n]**現了一次,在陣列中沒有出現,因此最終的異或結果即為這個缺失的數字。

在編寫**時,由於 [0…n]恰好是這個陣列的下標加上 nn,因此可以用一次迴圈完成所有的異或運算,例如下面這個例子。

}參考:

268 缺失數字

難度 簡單 題目描述 解題思路 最簡單的可以用桶計數或者排序,然後找到沒出現過的數字。但是題目要求線性時間複雜度,所以不能排序,又只使用額外常數空間,也不能用桶計數。因為這個題裡資料範圍是確定的,而且只缺失乙個正整數,所以可以先計算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說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?思路 首先通過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進行異或將得到某...