在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
雜湊表
上述方法需要o(n)的空間複雜度。int
findduplicatenum
(vector<
int> nums)
map[num]=1
;}return ret;
}
利用數字的性質
上述演算法只需要o(1)的空間複雜度,但是要改變原來的陣列,對於時間複雜度,因為每個數最多比較兩次就能擺放到正確的位置,因此總的時間複雜度仍然是o(n)。//以下方法基於0~n-1的數字如果不重複,那麼沒乙個數字都能擺放到正確的位置,即0放在0處,n-1放到n-1處。
intfindduplicatenum
(vector<
int> nums)
}return-1
;}
面試題3 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...
面試題3 陣列中重複的數字
面試題3 找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100...
面試題3 陣列中重複的數字
leetcode面試題3 思路1 建立乙個陣列,將原陣列元素當做下標統計次數 int findrepeatnumber int nums,int numssize count times for int i 0 i numssize i no such element return 1 思路2 排序...