您的位置:首页 > 其它

First Bad Version

2015-09-18 10:40 155 查看
           
很久没在OJ上刷题了,不知不觉现在都已经是研究生了。开学才半个月,就感觉研究生生活是这么的无聊,每天不是看论文就是上课(ps:偶尔还打打游戏……)在yyd的建议下,决定重拾刷题的乐趣。在此,也希望有志同道合的小伙伴能加入我这个刷题小分队,大家一起快乐学习,共同进步


   

    废话少说,先来看看我2年后复出的第一道算法题吧^_^  (大牛看到这里就可以止步了……)

    


题意很简单,就是一个产品有n个版本,依次为1,2,3,……,n,如果某个版本有问题,那么后面所有的版本都会受到影响,现在要知道第一个出现问题的版本号(题目中提供了判断版本是否有问题的方法isBadVersion)

      首先能想到的最简单的方法就是从版本号1开始遍历,找到第一个isBadVersion返回true的版本号就结束,但这种方法对于n很大的情况肯定会超时。

      其实,熟悉二分法的看到这个题目的第一眼就知道是二分,因为本题刚好满足有序,且要查找中间某个特定的数。知道二分了,下面的代码就很简单了。但有一个地方需要注意,我在代码中已标注。

       

class Solution {
public:
int firstBadVersion(int n) {
long low,mid,up;
low=1;up=n;
while(low<up)
{
//当n很大时,此处low+up可能溢出,所以将low,up,mid声明为长整型
mid=(low+up)>>1;
if(isBadVersion(mid))
up=mid;
else
low=mid+1;
}
return low;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: