題目描述
在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那么對應的輸出是重復的數字2或者3。
算法解析:如果一個長度為n的數組的所有數字都在0 到n-1的范圍內,那么排序后,如果不重復,則一定有data[i] = i,如果存在一個data[data[i]] = i,且data[data[i]] != data[i],所以現在讓我們從頭到尾這個數組,當我們掃描到下標為i的數字的時候,如果這個數字m不等于i,則將他和第m個數字比較,如果兩者相等,則有一個重復數字,如果不同,則交換兩個數字,接下來重復這個過程。
代碼如下:
public boolean duplicate(int numbers[],int length,int [] duplication) { if (numbers == null || length <= 1){ return false; } for (int i = 0; i < length; i++) { if (numbers[i] < 0 || numbers[i] > length - 1) return false; } for (int i = 0; i < length; i++) { while (numbers[i] != i){ if (numbers[i] == numbers[numbers[i]]){ duplication[0] = numbers[i]; return true; } int temp = numbers[i]; numbers[i] = numbers[temp]; numbers[temp] = temp; } } return false; }新聞熱點
疑難解答