Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组中查找重复整数_Java_Arrays - Fatal编程技术网

Java 在数组中查找重复整数

Java 在数组中查找重复整数,java,arrays,Java,Arrays,我在作业中遇到的问题是:有一个由n个整数组成的数组,都在1到1000000之间,至少有一对相等的整数,如何找到第一对?需求是完成O(n)的时间复杂度,因此嵌套循环不是选项,语言是java。有什么建议吗?只需计算数组中某个数字的出现次数。为了实现这个目标,您可以选择使用数组、HashMap、HashSet等等 由于需要找到第一个副本,如果我必须使用set,我将执行以下操作: int[] numbers = ... Set<Integer> numberSet = new HashSet

我在作业中遇到的问题是:有一个由n个整数组成的数组,都在1到1000000之间,至少有一对相等的整数,如何找到第一对?需求是完成O(n)的时间复杂度,因此嵌套循环不是选项,语言是java。有什么建议吗?

只需计算数组中某个数字的出现次数。为了实现这个目标,您可以选择使用数组、HashMap、HashSet等等

由于需要找到第一个副本,如果我必须使用set,我将执行以下操作:

int[] numbers = ...
Set<Integer> numberSet = new HashSet<>();

for ( int number : numbers ) {
    if ( ! numberSet.add(number) ) {
        return number;
    }
}
int[]数字=。。。
Set numberSet=newhashset();
用于(整数:数字){
如果(!numberSet.add(number)){
返回号码;
}
}

我会制作一个
布尔[]
数组来标记我是否已经在迭代的前一步中找到了一些数字

例如:

int[] input = { .... };
boolean[] found = new boolean[1000000];
int result = -1;

for (int i = 0; i < input.length; i++) {
   if (!found[input[i]]) {
       found[input[i]] = true;
   } else {
       result = input[i];
       break;
   }
}

System.out.println("I found a pair of " + result);
int[]输入={….};
布尔值[]已找到=新布尔值[1000000];
int结果=-1;
for(int i=0;i
显示您的代码您为什么不能使用集合?添加值时,如果add return false,则表示该值重复。在这种情况下,contains是多余的,因为如果对象已存在于集合中,则add已返回布尔值;)