1. 程式人生 > >數組中重復的數字(劍指offer)

數組中重復的數字(劍指offer)

tro off lse esc ted color style ise strong

題目描述

在一個長度為n的數組裏的所有數字都在0到n-1的範圍內。 數組中某些數字是重復的,但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如,如果輸入長度為7的數組{2,3,1,0,2,5,3},那麽對應的輸出是第一個重復的數字2。 方法一:雙for 時間復雜度:o(n^2) 空間復雜度o(1) 時間復雜度太高了,盡量避免啊
public class Solution {
    // Parameters:
    //    numbers:     an array of integers
    
// length: the length of array numbers // duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation; // Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++
// 這裏要特別註意~返回任意重復的一個,賦值duplication[0] // Return value: true if the input is valid, and there are some duplications in the array number // otherwise false public boolean duplicate(int numbers[],int length,int [] duplication) { if(length<2) return false
; for(int i=0;i<length;i++){ for(int j=i+1;j<length;j++){ if(numbers[i]==numbers[j]){ duplication[0]=numbers[i]; return true; } } } duplication[0]=-1; return false; } }

方法二:加一個boolean 量標誌位

public class Solution {
    // Parameters:
    //    numbers:     an array of integers
    //    length:      the length of array numbers
    //    duplication: (Output) the duplicated number in the array number,length of duplication array is 1,so using duplication[0] = ? in implementation;
    //                  Here duplication like pointor in C/C++, duplication[0] equal *duplication in C/C++
    //    這裏要特別註意~返回任意重復的一個,賦值duplication[0]
    // Return value:       true if the input is valid, and there are some duplications in the array number
    //                     otherwise false
    public boolean duplicate(int numbers[],int length,int [] duplication) {
        if(length<2) return false;
        boolean [] k=new boolean[length];
        for(int i=0;i<length;i++){
            if(k[numbers[i]]==true){
                duplication[0]=numbers[i];
                return true;
            }
            k[numbers[i]]=true;
        }
        return false;
    }
}

數組中重復的數字(劍指offer)