第一个错误的版本

题记:

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

假设你有 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

提示:

1 <= bad <= n <= 2 ^ 31 - 1

题目来源:

作者:LeetCode

链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnto1s/

来源:力扣(LeetCode)

本题主要考察二分法 ,因为版本是有序递增排列的
解题方法:(二分法)递归

php 复制代码
class Solution extends VersionControl {
    /**
     * @param Integer $n
     * @return Integer
     */
    function firstBadVersion($n) {
        return $this->half(1,$n);
    }

    function half($low,$high){
        $mid = $low + floor(($low + $high) / 2);	//找到二分点
        if($this->isBadVersion($mid) !== true){		//如果二分点不是第一个错误的版本
            $this->half($mid + 1, $high);	//则在后半部分继续找
        }
        if($this->isBadVersion($mid) == true){	//二分点为错误版本
            if($this->isBadVersion($mid-1) == true){	//判断二分点是第一个错误版本的前一个版本是否为错误版本
                $this->half($low, $mid - 1);	//在前半部分找
            }
        }
        return $mid;
    }
}

非递归

php 复制代码
function firstBadVersion($n){
    $low = 1;
    $high = $n;
    while($low < $high){
        $mid = $low + floor(($high - $low) / 2);
        if($this->isBadVersion($mid)){
            $high = $mid;
        }else{
            $low = $mid + 1;
        }
    }
    return $low;
}
相关推荐
丶Darling.7 分钟前
26考研 | 王道 | 数据结构 | 第七章 查找
前端·数据结构·考研
明月清了个风8 分钟前
数据结构与算法学习笔记(Acwing提高课)----动态规划·数字三角形
笔记·学习·算法·动态规划
刃神太酷啦9 分钟前
堆和二叉树--数据结构初阶(3)(C/C++)
c语言·数据结构·c++·算法·leetcode·深度优先·宽度优先
●VON12 分钟前
杭电oj(1087、1203、1003)题解
算法·leetcode·职场和发展
良木林29 分钟前
240424 leetcode exercises II
c语言·数据结构·算法·leetcode
啊阿狸不会拉杆1 小时前
数据结构-排序
java·c语言·数据结构·c++·python·算法·排序算法
姜行运1 小时前
数据结构【树和二叉树】
android·数据结构·算法·c#
敢敢のwings1 小时前
相机雷达外参标定算法调研
数码相机·算法
User_芊芊君子1 小时前
【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
c语言·算法·矩阵
万岳软件开发小城2 小时前
基于PHP+Uniapp的互联网医院源码:电子处方功能落地方案
开发语言·uni-app·php·软件开发·互联网医院系统源码·智慧医院app