1. 程式人生 > >劍指offer-陣列中的重複數字(Java)

劍指offer-陣列中的重複數字(Java)

文章目錄

題目描述

	在一個長度為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;
}