劍指Offer【3(2)】:不修改數組找出重複的數字

題目

在一個長度爲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

相關文章
相關標籤/搜索