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