在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
题目解析根据这道题,首先肯定是定义一个方法,然后方法体里面对应的属性是数组
(方法一)
首先我们可以使用一下官方的详解,我把它转化成了自己语言来解答。(实际上就是用Set来建立一个集合来存储这个数组中的数据,当存在两个相同的东西的时候,就进行一个返回即可)
class Solution {
public int findRepeatNumber(int[] nums) {
Set list=new HashSet<>();//首先就是通过这个Set来存储
for(int num:nums){
if(list.contains(num)){//开始遍历这个数组,如果存在的话,就返回这个数字
return num;
}
else{
list.add(num);//如果不存在的话就将这个数字放到集合set里面去,当发现包含的有的时候,就返回
}
}
return -1;//如果一直遍历都没有对应的相同的数字出现的话,就说明不存在这样的数字,然后返回-1
}
}
不过说实话,发一简直就是脱了裤子放屁,太“简单”啦。
(方法二)
接下来就是方法二的解答了,我们可以进行一个设想,就是,因为这个数组里面的数字都是整数形式的,所以我们不难发现,所有的数字都可以用索引来表示,也就是每当出现第一个数字的时候,我们就可以用它来判断其对应的数字是不是索引,也就是传说中的nums[i]==i,如果是的话,就把它继续放在里面,然后进行下一个遍历,也就是i++,continue,否则的话,就跳出这个循环嘛,这个时候就需要用到while来进行一个解释,及while(i
```java
class Solution {
public int findRepeatNumber(int[] nums) {
int i=0;
while(i



