Java数组中重复的数字

要求:在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为8的数组[0,2,3,1,5,4,1,3],那么对应的输出就是1或者3,存在不合法的输入就输出-1。

package com.hy.algorithms;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 * 利用Set集合,遍历数组的元素,检查元素是否在集合中,不在则插入到集合里面;
 * 否则表明当前元素在数组中重复,返回当前元素。
 * 
 * @author 红鱼程序生活
 *
 */
public class FindSameNum {

	public static void main(String[] args) {
		Integer[] arr = {0,2,3,1,5,4,1,3};
		int result = duplicate(arr);
		System.out.println(Arrays.asList(arr) + "数组重复的数字是:" + result);
	}

	private static int duplicate(Integer[] arr) {
		Set<Integer> s = new HashSet<>();
		for (int i = 0; i < arr.length; i++) {
			if (s.contains(arr[i])) {
				return arr[i];
			} else {
				s.add(arr[i]);
			}
		}
		return -1;
	}
}

部分代码截图及运行结果

上面是的代码时间复杂度O(N)和空间复杂度O(N), 关于如何计算这两个维度,可以查看下一篇文章介绍,还有其他处理方式空间复杂度为O(1),也将在下一篇文章中介绍。

举报
评论 0