数组中重复的数字(Java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013132035/article/details/82154268

题目:

在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

代码实现:

public static boolean getRepeatNums(int numbers[], int length, int duplication[]){
	if(numbers == null || length <= 0){
		return false;
	}
	for(int i = 0; i < length; i++){
		if(numbers[i] < 0 || numbers[i] > length -1){
			return false;
		}
	}
	for(int i = 0; i < length; i++){
		while(numbers[i] != i){
			if(numbers[i] == numbers[numbers[i]]){
				duplication[0] = numbers[i];
				return true;
			}
			int tmp = numbers[i];
			numbers[i] = numbers[tmp];
			numbers[tmp] = tmp;
		}
	}
	return false;
}

代码实现: 

public static boolean getRepeatNums1(int numbers[], int length, int duplication[]){
	if(numbers==null || length<=0){
		return false;
	}
	for(int i = 0; i < length; i++){
		if(numbers[i] < 0 || numbers[i] > length-1){
			return false;
		}
	}
	Set<Integer> set = new HashSet<Integer>();
	for(int i = 0; i < length; i++){
		if(set.contains(numbers[i])){
			duplication[0] = numbers[i];
			return true;
		}else{
			set.add(numbers[i]);
		}
	}
	return false;
}

代码实现:

public boolean getRepeatNums2(int numbers[],int length,int [] duplication) {
        HashMap<Integer, Integer> countMap = new HashMap<Integer, Integer>();
        if(length < 2||numbers==null){
             return false;
        }
        int j = 1;
        for(int i = 0;i < length;i++){
            if(countMap.get(numbers[i]) == null){
                j = 1;
                countMap.put(numbers[i], j);
            }else{
                j = countMap.get(numbers[i]);
                j++;
                countMap.put(numbers[i], j);
            }
        }
        Iterator iter = countMap.entrySet().iterator();
        while(iter.hasNext()){
            Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iter.next();
            Integer key = entry.getKey();
            Integer val = countMap.get(key);
            if(val > 1){
                duplication[0] = key;
                return true;
            }
        }
        return false;
}

猜你喜欢

转载自blog.csdn.net/u013132035/article/details/82154268