找出重复数字
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;
}
};
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;
}
};
相关文章推荐
- Spring3.2新注解@ControllerAdvice
- HDU2058 The Sum Problem
- 测试LCD1602的显示,显示时间,提示语
- android:图片圆角问题
- 寻找旋转排序数组中的最小值
- 如何得到四大作用域
- 第一阶段知识总结及问题
- Cocos2D中的纹理大小计算
- Cocos2D中的纹理大小计算
- Cocos2D中的纹理大小计算
- wcf 配置与代码创建
- Cocos2d-x 如何输出 Android用电话 腰带Tag的Log刊物
- 系统全局环境变量设置
- 表达式中的数据类型转换
- 学习常量中指针变量和它指向的实体的个人理解
- 数据结构-树形结构实例
- 求二叉树的深度
- Spring 用注解实现IOC控制反转
- PHP 正则表达式匹配 preg_match 与 preg_match_all 函数
- 封装button