268 缺失數字

2021-10-07 13:01:23 字數 851 閱讀 3579

難度:簡單

題目描述

解題思路

最簡單的可以用桶計數或者排序,然後找到沒出現過的數字。但是題目要求線性時間複雜度,所以不能排序,又只使用額外常數空間,也不能用桶計數。

因為這個題裡資料範圍是確定的,而且只缺失乙個正整數,所以可以先計算0~n的和,然後依次減去陣列裡的元素,剩下來的就是沒出現過的。考慮到如果陣列範圍很大那直接算和可能會溢位,所以邊加邊減,一樣能達到效果。

和重複出現的數字那道題有點像,利用異或的性質,同0異1,而且0異或別的數字就等於他本身。

1^ 1 ^ 2^ 2^ 3 = 3

全部要注意乙個細節就是數字的範圍,數字範圍0~9,因為缺了一味,所以陣列長度是9,最大下標只能到8,所以要額外把9再做一次異或

268 缺失數字

排序,不多解釋,估計都能想到。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 ...

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進行異或將得到某...