第一个错误的版本

题记:

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

假设你有 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;
}
相关推荐
幸运超级加倍~21 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
yannan2019031328 分钟前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法30 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR30 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
linsa_pursuer31 分钟前
快乐数算法
算法·leetcode·职场和发展
小芒果_0133 分钟前
P11229 [CSP-J 2024] 小木棍
c++·算法·信息学奥赛
qq_4340859034 分钟前
Day 52 || 739. 每日温度 、 496.下一个更大元素 I 、503.下一个更大元素II
算法
Beau_Will34 分钟前
ZISUOJ 2024算法基础公选课练习一(2)
算法
XuanRanDev37 分钟前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
gkdpjj38 分钟前
C++优选算法十 哈希表
c++·算法·散列表