当前位置:网站首页>二分查找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;
}
}
边栏推荐
- NIO知识汇总 收藏这一篇就够了!!!
- g++参数说明
- 自监督论文阅读笔记 DenseCL:Dense Contrastive Learning for Self-Supervised Visual Pre-Training
- ucosII OSMemCreate()函数的解析
- Dynamic adjustment subject web system?Look at this one is enough
- 自监督论文阅读笔记FIAD net: a Fast SAR ship detection network based on feature integration attention and self
- A.1#【内存管理】——1.1.4 node: 初始化
- 2021-04-30
- IPC通信 - 管道
- cobalt strike 的基础使用
猜你喜欢
随机推荐
[frp intranet penetration]
002_旭日X3派初探:TogetherROS安装
Kotlin 中的泛型介绍
opencv
double型数据转字符串后通过MCU串口发送
NIO知识汇总 收藏这一篇就够了!!!
IO 复用
常见的电子元器件分类介绍-唯样商城
芯片解密工作应该具备哪些条件?唯样商城
自监督论文阅读笔记Index Your Position: A Novel Self-Supervised Learning Method for Remote Sensing Images Sema
关于芯片你了解吗?
g++参数说明
基于南航app直减自动出票
全球一流医疗技术公司如何最大程度提高设计工作效率 | SOLIDWORKS 产品探索
C# Base64加密
深度学习理论课程第四、五章总结
Hook初探索
block底层探索
Phase Vocoder的补充完善,Matlab音频变速不变调、变调不变速
常见的电子元器件分类介绍