/**
* 题目描述:
* 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。
* 由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
* 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
* 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中
* 出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
* 链接:https://leetcode.cn/problems/first-bad-version
*/
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
/**
* @Description 第一个错误的版本
* 题目难度:简单
* 考查知识点:二分查找
* @Author Jiangnan Cui
* @Date 2022/6/5 18:21
*/
public class Solution extends VersionControl {
/**
* @MethodName firstBadVersion
* @Description 第一个错误的版本
* 时间复杂度:O(n),其中n为版本数
* 空间复杂度:O(1)
* @param: n
* @return: int
* @Author Jiangnan Cui
* @Date 2022/6/5 18:32
*/
public int firstBadVersion(int n) {
//定义二分查找的左右边界left、right
int left = 1, right = n;
//在[left,right]范围内进行二分查找
while (left < right) {
//计算中点,为避免整型溢出,此处不使用(right + left) / 2
int mid = (right - left) / 2 + left;
//判断中间值是否为坏版本
if (isBadVersion(mid)) {
right = mid;//若中间值为坏版本,说明在此版本之前可能还有坏版本,因此向左查找,范围为[left,mid]
} else {
left = mid + 1;//若中间值不是坏版本,说明在此版本之后可能还有坏版本,因此向右查找,范围为[mid,right]
}
}
//当left==right时退出,此时的版本就是第一次出现的坏版本
return left;
}
}
06-13
1011

03-07
370

03-14
1238

“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交