首页 > 其他分享 >第一个错误的版本(二分查找法)

第一个错误的版本(二分查找法)

时间:2023-02-21 23:11:39浏览次数:34  
标签:二分 version 错误 int 查找 版本 left

题目:

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

假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

思路:

想法一:

经典的二分查找法,可用接口来与中间数作判断。若错误,向前检查。若正确,向后检查,知道确定left和right为两个临近数,所以循环条件为left<=right,这样left为false,right为true

相等也是有意义的,代表若是故障的,前一个就是好的,可以直接输出left。若是好的,后一个就是故障的,加1后输出left。

// The API isBadVersion is defined for you.
// bool isBadVersion(int version);

class Solution {
public:
    int firstBadVersion(int n) {
        int left = 1,right = n;
        while(left <= right){
            int mid = (right - left)/2 + left;
            if(isBadVersion(mid)){
                right = mid - 1;
            }else if(!isBadVersion(mid)){
                left = mid + 1;
            }
        }
            return left;
        
        
    }
};
  • 对此,我困惑的是两个循环条件。但二者在应用时没有本质的区别。
  • 在这个题目我看到题解是<而非<=时,我想到的是题目条件本身带来的变化,但经过手动尝试后发现难以解释这个思路,转而去看了看二分法的介绍,明白两种循环条件所带来的变化,对题目本身影响不大。只要搞清楚最后要输出什么就好。

标签:二分,version,错误,int,查找,版本,left
From: https://www.cnblogs.com/isku-ran/p/17142870.html

相关文章

  • c++ string find 查找失败时 应该注意的地方
    当字符串查找失败的时候#include<vector>#include<iostream>#include<string>#include<algorithm>#include<limits.h>usingnamespacestd;intmain(){......
  • Web安全入门与靶场实战(43)- 查看Linux版本
    脏牛漏洞是在Linux内核中存在的一个漏洞,具体原理是get_user_page内核函数在处理Copy-on-Write(简称COW)的过程中,可能产生竞态条件造成COW过程被破坏。这里我们不需要去理解......
  • 带标号二分图计数
    本文中\(f[i]\)表示\([x^i]f(x)\)带标号的二分图的数量不方便用一个式子直接写出,我们考虑用别的统计去推出它。我们先求出连通二分图的生成函数,再求任意二分图的生成......
  • 支持.Net多版本的类库开发步骤
    1、打开项目文件*.csproj,修改“TargetFramework”节点,将节点名称多加个“s”即“TargetFrameworks”,然后再增加要兼容的版本,使用“;”分开。  注意:如果要同时支持.Ne......
  • Java三大版本
    WriteOnce、RunAnywhereJavaSE:标准版(桌面程序,控制台开发......JavaME:嵌入式开发(手机,小家电.......JavaEE:E企业级开发(web端,服务器开发...)......
  • 版本冲突 git 230221
    冲突发生发生原因两个人同时在操作同一个文件在同一行发生内容冲突冲突解决删掉不要的确保格式正确......
  • 此网站无法提供安全连接(客户端和服务器不支持一般 SSL 协议版本或加密套件。)--TLS 1
     首先简单说一下我遇到问题的过程,我们公司有一根电信专线,下面有4个固定IP,有一个IP1已经绑定了A域名,且A域名申请过开端80、443端口(提交给客户经理),现在我们使用IP2来绑定......
  • 如何在高版本Android 调用 SystemProperties.set
     在高版Android中是无法找到SystemProperties类的,所以我们需要手动导入低版本的SDK.第一步、在app的build.gradle添加:StringSDK_DIR=System.getenv("/Users/dan......
  • 怎么查看office版本 如何查看office版本
    http://www.ccschy.com/internet/6688.html1、在桌面右键,菜单中选择新建‘MicrosoftExcel工作表’。2、在打开文件的时候,启动页上就会出现office的大版本,示例是2010版本......
  • 安装Pytorch如何选择CUDA的版本,看这一篇就够了
    CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅。Nvidia官方提供的CUDA库是一个完整的工具安装包,其中提供了Nvidia驱动程序、开发CUDA程......