在数组中查找重复的整数

时间:2014-08-02 13:03:21

标签: java arrays

我在赋值中遇到的问题:有一个n个整数的数组,都在1到1000000的范围内,至少有一对相等的整数,你怎么能找到第一对?要求是实现O(n)的时间复杂度,因此嵌套循环不是一个选项,语言是java。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我会创建一个boolean[]数组,以便标记我是否已经在迭代的上一步找到了一些数字。

例如:

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);

答案 1 :(得分:-1)

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

由于要求找到第一个副本,如果我必须使用set,我会这样做:

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

for ( int number : numbers ) {
    if ( ! numberSet.add(number) ) {
        return number;
    }
}