当前位置:网站首页>二分查找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;
}
}
边栏推荐
- 最优化方法概述
- page fault-页异常流程
- C# Base64加密
- 自监督论文阅读笔记 Self-supervised Label Augmentation via Input Transformations
- 影响PoE供电传输距离的除了网线还有啥?
- 自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training
- 自我监督学习和BERT模型
- A.1#【内存管理】——1.1.2 zone: struct zone
- 003_旭日X3派初探:利用无线串口通信控制舵机
- 设备树解析源码分析<devicetree>-1.基础结构
猜你喜欢

softmax和最大熵

自监督论文阅读笔记 TASK-RELATED SELF-SUPERVISED LEARNING FOR REMOTE SENSING IMAGE CHANGE DETECTION

自监督论文阅读笔记 Self-supervised Label Augmentation via Input Transformations

使用JSP实现简单的登录注册功能,并且使用Session跟踪用户登录信息

自监督论文阅读笔记 Ship Detection in Sentinel 2 Multi-Spectral Images with Self-Supervised Learning

【DC-5 Range Penetration】

自监督论文阅读笔记 S3Net:Self-supervised Self-ensembling Network for Semi-supervised RGB-D Salient Object Det

进程间通信IPC - 信号量

IPC 通信 - IPC

电容器和电池有什么不同?
随机推荐
ZEMAX | 在设计抬头显示器(HUD)时需要使用哪些工具?
自监督论文阅读笔记FIAD net: a Fast SAR ship detection network based on feature integration attention and self
各种cms getshell技巧
自监督论文阅读笔记DisCo: Remedy Self-supervised Learning on Lightweight Models with Distilled Contrastive
嵌入汇编-1 格式讲解
Qemu 搭建Armv8 平台
ZEMAX | 如何创建复杂的非序列物体
进程间通信IPC - 信号量
Delightful Nuxt3 Tutorial (2): Build a Blog Quickly and Easily
VS2022 encapsulation under Windows dynamic library and dynamic library calls
采用Trench肖特基二极管,实现功率密度的显著提升
电容器和电池有什么不同?
2021-04-23
ZEMAX | 在 OpticStudio 中使用自由曲面进行设计
电子元器件和电子元件的区别有那些?
ZEMAX | 探索 OpticStudio中的序列模式
A.1#【内存管理】——1.1.1 node:struct pglist_data
虚拟地址空间布局
关于梯度下降法的一些优化方法
ZEMAX | 如何使用渐晕系数