Array duplicate numbers - prove safety offer

Title Description

All numbers in a length of n in the array are in the range 0 to n-1. Some digital array is duplicated, but do not know how many numbers are duplicated. Do not know each digit is repeated several times. Please find an array of any one of the duplicate numbers. For example, if the length of the input array 7 {2,3,1,0,2,5,3}, then the corresponding output of the first 2 repeating digits.
 
Thinking: Since the numerical ranges are in the range 0-n-1 plus the length of the array so that the position numbers correspond directly to the
2 such as the first position plus the length of the array is then represented by the position 2 which has accessed once and if the value is greater than 2 times the length of the description has visited twice
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) {
        for(int i =0;i <length;i ++){
            int index = numbers[i] % length;
            numbers[index] += length;
            if(numbers[index] >= 2*length){
                duplication[0] = index;
                return true;
            }
        }
        return  false;
    }

}

 

Guess you like

Origin www.cnblogs.com/nlw-blog/p/12459844.html