力扣日記 268 缺失數字 位運算

2021-10-03 07:48:06 字數 2477 閱讀 8648

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

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

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

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

class

solution

:def

missingnumber

(self, nums: list[

int])-

>

int:

nums.sort(

)for i in

range

(len

(nums)):

if nums[i]

!=i:

return i

else

:return i+

1

給陣列排序,然後遍歷時對比,因為給定乙個包含 0, 1, 2, …, n 中 n 個數的序列,所以完整陣列元素應該等於下標。

而如果所有值都對應,那證明缺最後乙個值。

執行用時 :56 ms, 在所有 python3 提交中擊敗了94.91%的使用者

記憶體消耗 :14.3 mb, 在所有 python3 提交中擊敗了34.96%的使用者

時間複雜度:o(nlogn)。由於排序的時間複雜度為 o(nlogn),掃瞄陣列的時間複雜度為 o(n),因此總的時間複雜度為o(nlogn)。

空間複雜度:o(1) 或o(n)。空間複雜度取決於使用的排序演算法,根據排序演算法是否進行原地排序(即不使用額外的陣列進行臨時儲存),空間複雜度為 o(1) 或 o(n)。

不採用排序的方式,而是使用字典。進行兩次for迴圈即可。

di=

for i in nums:di[i]

=i for i in

range

(len

(nums)):

if i not

in di:

return i

else

:return i+

1

執行用時 :56 ms, 在所有 python3 提交中擊敗了94.91%的使用者

記憶體消耗 :14.3 mb, 在所有 python3 提交中擊敗了34.96%的使用者

時間複雜度:o(n)。掃瞄陣列的時間複雜度為 o(2n),因此總的時間複雜度為 o(n)。

空間複雜度:o(n)。使用了乙個字典儲存資料

考慮到任意數n,有n^n=0.易知:

class

solution

:def

missingnumber

(self, nums)

->

int:

k=len(nums)

for i,j in

enumerate

(nums)

: k^

=i^j

return k

這裡解釋一下k=len(nums)。

給定乙個包含 0, 1, 2, …, n 中 n 個數的序列,0……n^0……n=0.

但如果當中缺失乙個數,那麼兩個序列實際上變為01

23…n-101

3…n-1n

解釋:對乙個長度為10的列表,本應該0-9,如果缺了2,那麼實際上是0-1,3-10,共計十個數。所以正常兩個序列相乘就多出了乙個數:10,所以初始化k=len(nums)=10

執行用時 :36 ms, 在所有 python3 提交中擊敗了99.50%的使用者

記憶體消耗 :14.2 mb, 在所有 python3 提交中擊敗了34.96%的使用者

時間複雜度:o(n),僅一次迴圈

空間複雜度:o(1),僅乙個變數

採用高斯求和公式求和減去陣列求和。

class

solution

:def

missingnumber

(self, nums)

->

int:

k,sum=0,

(len

(nums)*(

len(nums)+1

))//2

for i in nums:

k+=i

return sum-k

時間複雜度:o(n),僅一次迴圈

空間複雜度:o(1),僅乙個變數

力扣日記 405 數字轉16進製制 位運算

給定乙個整數,編寫乙個演算法將這個數轉換為十六進製制數。對於負整數,我們通常使用補碼運算方法。注意 十六進製制中所有字母 a f 都必須是小寫。十六進製制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元 0 來表示 對於其他情況,十六進製制字串中的第乙個字元將不會是0字元。給定的數確保...

標記法 缺失數字 力扣(LeetCode)

給定乙個包含0,1,2,n中 n 個數的序列,找出 0 n 中沒有出現在序列中的那個數。示例 1 輸入 3,0,1 輸出 2示例 2 輸入 9,6,4,2,3,5,7,0,1 輸出 8說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?看到這個題的第乙個思路是標記法,之前在那好像看...

力扣(LeetCode)缺失數字 個人題解

給定乙個包含0,1,2,n中 n 個數的序列,找出 0 n 中沒有出現在序列中的那個數。示例 1 輸入 3,0,1 輸出 2示例 2 輸入 9,6,4,2,3,5,7,0,1 輸出 8說明 你的演算法應具有線性時間複雜度。你能否僅使用額外常數空間來實現?思路有兩種,一種是求和,根據數學方法算出缺失項...