第一个错误的版本

题记:

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

假设你有 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;
}
相关推荐
jiao_mrswang28 分钟前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca36 分钟前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱37 分钟前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子42 分钟前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!43 分钟前
【优选算法】二分查找
c++·算法
王燕龙(大卫)1 小时前
leetcode 数组中第k个最大元素
算法·leetcode
不去幼儿园2 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
盼海3 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
网易独家音乐人Mike Zhou6 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot