找出陣列中重複的數字。
在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。
示例 1:
輸入:[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3
限制:2 <= n <= 100000
思路分析:
我們最容易想到集合,集合的元素一定是非空的,但是集合的開銷和維護比較大。直接用最簡單的bool陣列,如果數字出現過,直接返回數字,否則,將其標記為true即可。
class solution
else
}return-1
;}}
思路二:
這個我也是通過題解看到有大佬做出來的。
我們方法一雖然很簡單,但是缺點也很明顯,就是需要n大小的空間來儲存狀態。
我們可以通過檢測當前把當前資料作為索引,這個索引在陣列裡的值如果是自身,就返回即可,否則,一直交換,直到當前資料和其索引相同。
(因為資料保持在0-n-1之間,所以我們才可以保持這樣做而不會越界)
class
solution
else}}
return-1
;}private
boolean
valuenotequalindex
(int
nums,
int i)
private
boolean
selfequalvalueofselfasindexatarray
(int
nums,
int i)
private
void
swapselfandvalueofselfasindexatarray
(int
nums,
int i)
private
void
swap
(int
nums,
int index1,
int index2)
}
其實我們最後發現這兩個差不多,是因為我們用了函式的方式,再者,布林陣列的開銷很低,所以,差不多。
但是,我們可以在這個題找到一種思路,就是,資料自身置換而不利用額外的空間,這個思路在空間有限的時候挺重要的。
陣列 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 python 實現 an highlighted block ...
陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個 數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如 如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。include iostream using namespace ...
陣列中重複的數字
題目 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。思路 用雜湊表解決的時間複雜度和空間複雜度為o n 因為陣列中...