第一个错误的版本

题记:

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

假设你有 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;
}
相关推荐
算AI9 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
我不会编程55510 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
owde10 小时前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头10 小时前
分享宝藏之List转Markdown
数据结构·list
hyshhhh11 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
蒙奇D索大11 小时前
【数据结构】第六章启航:图论入门——从零掌握有向图、无向图与简单图
c语言·数据结构·考研·改行学it
A旧城以西11 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
杉之12 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓12 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf12 小时前
图论----拓扑排序
算法·图论