最常规的思路,先把数字排序,如果存在重复数字,那么一定在相邻位置,这样依次判断相邻的元素。
`
for(int i=0;i<nums.size();i++)
{
if(nums[i]>=nums.size()||nums[i]<0)
return -1;
}
sort(nums.begin(),nums.end());
int flag=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==nums[i+1])
{return nums[i];
flag++;
i=i+1;}
}
if(flag==0)
return -1; //必须设置返回值,不然程序会自动返回,那么其返回的信息可能是错误信息。
}
交换位置,利用抽屉原理,每个位置为对应的位置号
`
int len=nums.size();
if(len==0)
return -1;
for(int i=0;i<len;i++)
{
if(nums[i]<0||nums[i]>=len)
return -1;
}
for(int i=0;i<len;i++)
{
while(nums[i]!=nums[nums[i]]) //如果数对应的位置与数不相等,则调换位置
swap(nums[i],nums[nums[i]]);
// if(i!=nums[i]) 这里实际上i的移动是对应的指针,如果当前的指针在交换后仍然存在不等的情况,说明必然有值重复
// return nums[i];
}
// return -1;
for(int i=0;i<len;i++)
{
if(nums[i]!=i)
return nums[i];
else if((nums[i]==i)&&i==len-1)
return -1;
}
}
`