劍指offer-陣列中的重複數字(Java)
阿新 • • 發佈:2018-11-07
文章目錄
題目描述
在一個長度為n的數組裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意一個重複的數字。
示例
輸入: {2,3,1,0,2,5,3}
輸出: 2或3
解析
從頭到尾依次掃描這個陣列中的每個數字,當掃描到下標為i的數字時,首先比較這個數字(用m表示)是不是等於i。如果是,則接著掃描下一個數字;如果不是,則再拿它和第m個數字進行比較。如果它和第m個數字相等,就找到了一個重複的數字;如果它和第m個數字不相等,就把第i個數字和第m個數字交換,把m放到屬於它的位置。接下來再重複這個比較、交換的過程,直到我們發現一個重複的數字。 int duplicate(int[] array){ if(array == null || array.length == 0){ return -1; } int length = array.length; for(int i=0; i<length; i++){ if(array[i] < 0 || array[i] > length-1){ return -1; } } for(int i=0; i<length; i++){ while(array[i] != i) { if(array[i] == array[array[i]]){ return array[i]; } int temp = array[i]; array[i] = array[temp]; array[temp] = temp; } } return -1; }