Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.
思路:借用二分查找的思路,令mid=low+(high-low)/2,记录cnt为数组中值小于等于mid的个数,如果cnt>mid,重复的数字肯定在1...mid之间;否则,重复的数字在mid+1,...high之间
class Solution {
public:
int findDuplicate(vector<int>& nums) {
int len=nums.size();
if(len<=1)
return 0;
int low=1;
int high=len-1;
while(low<high)
{
int mid=low+(high-low)/2;
int cnt=0;
for(int i=0;i<len;i++)
{
if(nums[i]<=mid)
cnt++;
}
if(cnt<=mid)
low=mid+1;
else
high=mid;
}
return low;
}
};