面試題3 1 陣列中重複的數字

2022-06-16 15:57:13 字數 1343 閱讀 4160

在乙個長度為n的陣列裡的所有數字都在0~n-1的範圍內。陣列中某些數字是重複的,但是不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7,的陣列,那麼對應的輸出是重複的陣列2或者3。

1.考慮輸入陣列為空,測試用例為{};

2.考慮輸入陣列含有大於陣列規模的數,測試用例為;

3.考慮輸入陣列不重複,包含兩種可能(都是小於陣列規模的數,存在大於陣列規模的數(2)

中包含),測試用例為;

將陣列進行排序,從排好序的陣列的開頭進行遍歷,記錄當前位置與其之前位置的數,進行比較,若相等則輸出該數,否則判斷下一位數。

1

public

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)。

對陣列元素進行遍歷,每次判斷雜湊表中是否有該元素,若有,輸出此重複元素,若最後雜湊表中元素數量與陣列規模相等,表明無重複元素。

1

public

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個數字進行比較。若相等,則返回該重複數字;否則,交換兩個數字,繼續重複前面的過程。

1

public

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 如果出現...