原题链接:数组中重复的数字_牛客题霸_牛客网
描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
示例1
输入:
[2,3,1,0,2,5,3]
返回值:
2
说明:
2或3都是对的
解析思路:
时间复杂度肯定是O(n),所以只能遍历一遍或者两遍。则我们肯定想到用hashMap存一下,插入之前存一下,如果存在的话则直接返回对应的key。
这题由于没有限制空间,所以我们提高一下难度,不使用HashMap,用数组去替代。申请一个长度为n的数组,如果读到的数字是4,则int[4]s++,如果读到的数字是2,则ints[2]++。
代码:
public static void main(String[] args) {
Solution solution = new Solution();
int[] ints = {2, 3, 1, 0, 2, 5, 3};
int i = solution.duplicate(ints);
System.out.println(i);
}
public int duplicate(int[] numbers) {
// write code here
int[] values = new int[numbers.length];
for (int value : numbers) {
if (values[value] == 1) {
return value;
}
values[value]++;
}
return -1;
}