要求:找一个重复的数字,范围0-n-1
思路:我们要使nums[i]=i。设nums[i]=m,而nums[m]=k,如果nums[i]=m=i则下一个,如果nums[i]=m≠i,则如果nums[m]=k=m则m是重复数否则交换nums[i]=k,nums[m]=m,即让m位置对。
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
int i=0,n=nums.size();
while(i<n){
if(nums[i]!=i){
if(nums[nums[i]]==nums[i])return nums[i];
else swap(nums[i],nums[nums[i]]);
}
else ++i;
}
return -1;
}
};