第一个错误的版本

题记:

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

假设你有 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;
}
相关推荐
清酒难咽1 天前
算法案例之递归
c++·经验分享·算法
让我上个超影吧1 天前
【力扣26&80】删除有序数组中的重复项
算法·leetcode
张张努力变强1 天前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
沉默-_-1 天前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
钱彬 (Qian Bin)1 天前
项目实践19—全球证件智能识别系统(优化检索算法:从MobileNet转EfficientNet)
算法·全球证件识别
feifeigo1231 天前
基于EM算法的混合Copula MATLAB实现
开发语言·算法·matlab
漫随流水1 天前
leetcode回溯算法(78.子集)
数据结构·算法·leetcode·回溯算法
盛世宏博北京1 天前
高效环境管控:楼宇机房以太网温湿度精准监测系统方案
开发语言·数据库·php·以太网温湿度变送器
全栈游侠1 天前
数据结构 - 链表
数据结构·链表
一生只为赢1 天前
通俗易懂:ARM指令的寻址方式(三)
运维·arm开发·数据结构·嵌入式实时数据库