劍指offer 找出陣列中重複的數字

2021-09-11 00:19:11 字數 737 閱讀 3290

題目:

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

分析:陣列中的數字為0~n-1的範圍內,如果再這個陣列中不存在重複的數字,則我們把數字i放到下標i進行排序,排序之後,數字i會出現再下標為i的位置。由於陣列中有重複的數字,有些位置就可能存在多個數字,也有些位置可能沒有數字。

解答:從頭到尾一次掃瞄陣列中的每乙個數字,當掃瞄到下標為i的數字時,首先比較這個數字m(用m表示a[i])與下標i是不是相等的,如果是,繼續掃瞄;如果不是,再將數字m和下標為m的數作比較。如果它和下標為m的數字相等,則找到了這個重複數字m,如果不相等,則交換a[i](也就是m)和a[m],把m放到屬於它的位置。重複這個比較和交換過程,直到我們發現乙個重複的數字。

public static void main(string args) ;

int s = duplicate(a);

if (s == -1) else if (s == -2) else }

public static int duplicate(int a)

for(int i=0;ia.length-1)

return -1;

} for(int i=0;i}

} return -2;

}

劍指offer 找出陣列中重複的數字

問題 在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍裡,不知道重複的數字,也不知道每個重複數字重複幾次,找出陣列中所有重複的數字,如輸入,則應輸出。要求1 能改變陣列中的數字 思路1 將陣列排序,然後遍歷陣列,找出重複的數字。時間複雜度o nlogn 空間複雜度o 1 思路1的實現 vecto...

劍指offer 找出陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 暴力求解的思路非常的直接...

劍指offer 陣列 找出陣列中重複的數字

給定乙個長度為 n 的整數陣列 nums,陣列中所有的數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。注意 如果某些數字不在 0 n 1 的範圍內,或陣列中不包含重複數字,則返回 1 樣例給定 nums 2...