在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:
2 <= n <= 100000
我主要采用三种方法:
第一种为先进行排序在进行输出:
class Solution {
public int findRepeatNumber(int[] nums) {
//先排序在进行检查
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(nums[i]==nums[i-1]{
return nums[i];
}
}
return -1;
}
}
第二种采用set集合:
class Solution {
public int findRepeatNumber(int[] nums) {
Set<Integer>set=new HashSet<>();
//找出重复的数字并进行输出
for(int num:nums){
if(!set.add(num)){
return num;
}
}
return -1;
}
}
第三种采用一个计数器,进行计数:
class Solution {
public int findRepeatNumber(int[] nums) {
//设置一个计数器
int l = nums.length;
int[] count = new int[l];
for(int i=0;i<l;i++){
count[nums[i]]++;
}
for(int i=0;i<l;i++){
if(count[i]>1) return i;
}
return 0;
}
}