题目
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例 1:
输入:
[2, 3, 1, 0, 2, 5, 3]
输出:2 或 3
自己的想法
class Solution {
public int findRepeatNumber(int[] nums) {
//定义标志
boolean flag = false;
//定义找到的这个数字
int theOne = 0;
//二重for循环,首先第一个和之后数字比较,若发现一样的则赋值并break掉
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]==nums[j]){
flag=true;
theOne = nums[i];
break;
}
}
}
//返回找到的数字
return theOne;
}
}
测试结果
- 测试结果是正确的,但是已提交代码的时候,就会不对劲了,反思了之后觉得是复杂度太大了,而且提交的测试用例都有很多,这个时候我的第一反应代码就成了。
- 然后看了题解后,有了以下代码~
class Solution {
public int findRepeatNumber(int[] nums) {
Set set = new HashSet();
//定义待找到的数字
int i = -1;
//增强for循环
for(int num:nums){
/*向set里加入数字,但是这个set集合是不重复的,当有数字和之前的数字一样的话,就会返回false,这个时候取反,就会记录该数字,并break*/
if(!set.add(num)){
i = num;
break;
}
}
return i;
}
}
结果提交可以通过