offer03:陣列中重複的數字
阿新 • • 發佈:2021-02-08
offer03:陣列中重複的數字
問題:
找出陣列中重複的數字
問題描述:
在一個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。
解決方法:遍歷陣列
由於只需要找出陣列中任意一個重複的數字,因此遍歷陣列,遇到重複的數字即返回。為了判斷一個數字是否重複遇到,使用集合儲存已經遇到的數字,如果遇到的一個數字已經在集合中,則當前的數字是重複數字。
-
初始化集合為空集合,設重複的數字 repeat = -1
-
遍歷陣列中的每個元素:
往集合中填加元素時(set.add()),判斷元素是否在已存在 = 元素是否可以加入集合 。
① 可以加入集合 = 元素不在集合中;將該元素加入集合。
② 不可以加入集合 = 在集合中;即找到重複數字,並把重複的數字賦值給repeat;遍歷結束。
-
返回 repeat
程式碼
class Solution{
public int findRepeatNumber(int [] nums){
Set<Integer> set = new HashSet<Integer>();
int repeat = -1;
for (int num : nums){
if (!set.add(num)){
repeat = num;
break;
}
}
return repeat;
}
}
複雜度
-
時間複雜度:O(n)。 遍歷陣列一遍。使用雜湊集合(HashSet),新增元素的時間複雜度為 O(1),故總的時間複雜度是 O(n)。
-
空間複雜度:O(n)。不重複的每個元素都可能存入集合,因此佔用 O(n) 額外空間。
作者:LeetCode-Solution
連結:力扣
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。