在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內。陣列中某些數字是重複的,但是不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7,的陣列,那麼對應的輸出是重複的陣列2或者3。
1.考慮輸入陣列為空,測試用例為{};
2.考慮輸入陣列含有大於陣列規模的數,測試用例為;
3.考慮輸入陣列不重複,包含兩種可能(都是小於陣列規模的數,存在大於陣列規模的數(2)
中包含),測試用例為;
將陣列進行排序,從排好序的陣列的開頭進行遍歷,記錄當前位置與其之前位置的數,進行比較,若相等則輸出該數,否則判斷下一位數。
1public
static
int getrepeatnumber(int
array) 56
//solution 1 sort array then search from first to end
7arrays.sort(array);
8if (array[len - 1] >=len) else
else19}
20if (i ==len) else25}
26 }
複雜度分析:時間複雜度o(nlogn),空間複雜度o(1)。
對陣列元素進行遍歷,每次判斷雜湊表中是否有該元素,若有,輸出此重複元素,若最後雜湊表中元素數量與陣列規模相等,表明無重複元素。
1public
static
int getrepeatnumber(int
array)
5 setset = new hashset<>();
6int i = 0;
7for(; i < len; i++) else
else16}
17}18if (i ==len) else
23 }
複雜度分析: 時間複雜度o(n),空間複雜度o(n)。
從頭到尾依次掃瞄陣列中每乙個數字。當掃瞄到第i個元素時,比較該位置數值m是否等於i。若是,接著掃瞄下乙個數字;否則,將其與第m個數字進行比較。若相等,則返回該重複數字;否則,交換兩個數字,繼續重複前面的過程。
1public
static
int getrepeatnumber(int
array)
5for(int i = 1; i else
else19}
20}21}
22return -1;
23 }
複雜度分析: 時間複雜度o(n),空間複雜度o(1)。
面試題3 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0 n 1範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。1.方法一 把輸入的資料進行排序,排序後再判斷有無重複的數字,時間複雜...
面試題03 陣列中重複的數字
題目二 不修改陣列找出重複的數字 相似題目 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。解決這個問題的乙個簡單的...
面試題03 陣列中重複的數字
在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。只輸出第乙個重複的數字 示例 1 輸入 2,3,1,0,2,5,3 輸出 2解決辦法 使用hashset 如果出現...