JZ3 数组中重复的数字
OJ链接
描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1
数据范围:0≤n≤10000
进阶:时间复杂度O(n) ,空间复杂度O(n)
示例1
输入:[2,3,1,0,2,5,3]
返回值:2
说明:
2或3都是对的
解法:
利用集合,遍历的同时加入元素,每次判断集合中是否存在当前元素,存在说明该元素重复,返回该元素。无重复元素返回-1。
代码实现:
import java.util.*;
public class Solution {
public int duplicate (int[] numbers) {
Set<Integer> s = new HashSet<>();
for (int i = 0; i < numbers.length; i ++) {
if (s.contains(numbers[i])) {
return numbers[i];
}
s.add(numbers[i]);
}
return -1;
}
}