在一個長度爲n+1的數組裏面的全部數字都在1~n的範圍內,因此數組中至少有一個數字是重複的。請找出數組中任意一個重複的數字,但不能修改輸入的數組。例如,若是輸入長度爲9的數組{2,3,5,4,3,2,6,7},那麼對應的輸出是重複的數字2或者3。數組
建立一個長度爲n+1的輔助數組,將原數組逐一複製到輔助數組中。若是原數組被複制的數字爲m,則將它複製到輔助數組中下標爲m的位置。code
時間複雜度:O(n),空間複雜度:O(n)
public static boolean test(int[] array){ if(array == null || array.length<=0){ return false; } for(int i=0;i<array.length;i++){ if(array[i]>=array.length || array[i]<=0){ return false; } } int[] arr = new int[array.length]; for(int i=0;i<array.length;i++){ if(arr[array[i]]==array[i]){ System.out.println(array[i]); return true; }else{ arr[array[i]] = array[i]; } } return false; }
參考:《劍指Offer》test