美文网首页
【算法题】22.第一个错误的版本

【算法题】22.第一个错误的版本

作者: _涼城 | 来源:发表于2022-03-05 20:23 被阅读0次

    题目

    你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

    假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

    你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

    示例1

    输入:n = 5, bad = 4
    输出:4
    解释:
    调用 isBadVersion(3) -> false
    调用 isBadVersion(5) -> true
    调用 isBadVersion(4) -> true
    所以,4 是第一个错误的版本。

    示例2

    输入:n = 1, bad = 1
    输出:1

    思路

        当一个版本为正确版本,则该版本之前的所有版本均为正确版本;当一个版本为错误版本,则该版本之后的所有版本均为错误版本。我们可以利用这个性质进行二分查找。
        设定左右边界之后,每次我们都依据左右边界找到其中间的版本,检查其是否为正确版本。如果该版本为正确版本,那么第一个错误的版本必然位于该版本的右侧,我们缩紧左边界;否则第一个错误的版本必然位于该版本及该版本的左侧,我们缩紧右边界。
        这样我们每判断一次都可以缩紧一次边界,而每次缩紧时两边界距离将变为原来的一半,因此我们至多只需要缩紧 O(log_n)次。

    代码实现

    int firstBadVersion(int n) {
        long int good=1,bad=n;
       
        while(bad>=good){
            long int middle= (good+bad)/2;
            if(isBadVersion(middle)){
               bad=middle-1;
            } else{
               good=middle+1;
            } 
        }
        return good;
    }
    

    相关文章

      网友评论

          本文标题:【算法题】22.第一个错误的版本

          本文链接:https://www.haomeiwen.com/subject/kvmbrrtx.html