当前位置:网站首页>二分查找5 - 第一个错误的版本
二分查找5 - 第一个错误的版本
2022-08-03 05:25:00 【花开花落夏】
第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
来源:力扣(LeetCode)
二 解题
根据题目要求,若第k个数为正确版本,第k+1个数为错误版本,则k+1为所求的值。使用二分查找来求k值,k为mid。
注意:有一种情况,当left=right时(例如left=right=1),left值还没有做出有效判断。因此在最后加一个if(isBadVersion(left)) return left;来判断left=right时的情况。
/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left = 1,right = n,mid;
if(n==1&&isBadVersion(n)){
return n;
}else{
while (left<right){
mid = left+(right-left)/2;
if((!isBadVersion(mid))&&isBadVersion(mid+1)){
return mid+1;
}else if(!isBadVersion(mid)){
left=mid+1;
}else{
right=mid;
}
}
}
if(isBadVersion(left)) return left;
return -1;
}
}
运行效率较低
三 优化
当mid值为错误版本时,结果小于等于mid,当mid值为正确版本时,结果大于mid。因此我们可以使用此条件逐渐收缩范围,当范围为一个值时,就为所求的值。
/* The isBadVersion API is defined in the parent class VersionControl. boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left = 1,right = n,mid;
while(left<right){
mid = left+(right-left)/2;
if(isBadVersion(mid)){
right=mid;
}else{
left=mid+1;
}
}
return left;
}
}
边栏推荐
猜你喜欢

softmax和最大熵

稳压二极管的工作原理及稳压二极管使用电路图

Hook初探索

2021-04-30

自监督论文阅读笔记 Self-Supervised Visual Representation Learning with Semantic Grouping

深度学习基本概念

自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training

Windos 内网渗透之Token的使用

VCC(电源)和 GND(地)之间电容的作用

pandoc -crossref插件实现markdwon文档转word后公式编号自定义
随机推荐
ucos任务调度原理
电子元器件和电子元件的区别有那些?
什么是参数化设计,通过实操了解一下? | SOLIDWORKS 操作视频
What is parametric design, let's understand it through practical operation?| SOLIDWORKS How-To Videos
Kotlin 中的泛型介绍
观看华为AI技术领域课程--深度学习前三章总结
三分钟看懂二极管的所有基础知识点
ZEMAX | 探究 OpticStudio 偏振分析功能
Automatic ticket issuance based on direct reduction of China Southern Airlines app
进程间通信IPC - 信号量
2021-04-30
自监督论文阅读笔记 Self-supervised Label Augmentation via Input Transformations
在大程序中怎么样显示LED点阵
001_旭日X3派初探:开箱测试
自监督论文阅读笔记Efficient Self-supervised Vision Pretraining with Local Masked Reconstruction
STM32启动文件的选择
A.1#【内存管理】——1.1.4 node: 初始化
servlet学习(七)ServletContext
MySql【后面附有练习题】
【第二周】卷积神经网络