题目:
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
限制:2<=n<=100000
题目很好理解,没有什么需要分析的部分.既然n个数字,范围却是0~n-1,肯定有重复的.
一.统计个数
题目是为了找重复的数字,最简单的方法就是把他们出现的次数都统计出来,结果大于1的,自然就是重复了.像桶排序一样,先创建桶,这里是下标,因为正好给定的数组的元素个数是 n ,数值范围是 0 ~ n-1.那么就可以用下标代表某个数字,然后对应的值来代表出现的个数.
class Solution {
public int findRepeatNumber(int[] nums) {
//新建一个数组,下标代表原数组中的元素,因此下标只需要到n-1
int[] count=new int[nums.length];
int ans=0;
for(int i:nums){
if(count[i]==0){
count[i]++;
}else{
ans=i;
break;
}
}
re