给定一个长度为n的数组nums 数组的所有数组都在0~n-1范围内。
数组中某些数组重复,但不知道几个数字重复,也不知道数字重复几次,请找出数组中任意一个重复的数字。
解题思路:如果第1个位置的数是4,则把这个数与第4个位置的数比较,如果不相同,把这个数与第4个位置上面的数交换
这样每次就能把一个数放到正确的位置上去。
再把第一个位置的数换到正确的位置上去,直到换到不能换为止。
int duplicateInArr(vector<int>& nums)
{
int n= nums.size();
for(int i=0;i<n;++i)
{
cout<<nums[i]<<" ";
if(nums[i]<0 || nums[i]>n)
return -1;
}
cout<<endl;
for(int i=0;i<n;i++)
{
while(nums[i] != i && nums[nums[i]] != nums[i])
//如果第i个位置的数与i不等,并且这个数对应的位置的数也不是对应得数
{
swap(nums[i],nums[nums[i]]);//把一个数字放到正确的位置上去
}
if(nums[i]!= i && nums[nums[i]]==nums[i])
//如果第i个位置的数与i不等,但是第i个位置已经有了正确的值,那么这个值就是重复的值。
return nums[i];
}
return -1;
}