您的位置:首页 > 其它

找出重复数字

2015-10-03 21:35 295 查看

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: