278. 第一个错误的版本

278. 第一个错误的版本

leetcode 278. 第一个错误的版本


题目:278. 第一个错误的版本

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

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

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

示例:

给定 n = 5,并且 version = 4 是第一个错误的版本。

调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true

所以,4 是第一个错误的版本。

方法:二分查找

思路:通过二分查找缩小区间查找,每次缩小一半,如果中间的版本是正确的版本则将右边界往中间移,否则将左边界往中间移,当左边界等于右边界时,此版本即为第一个错误的结果或第一个错误的结果前面的版本。

运行数据:执行用时:16 ms,内存消耗:36.4 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// LeetCode指定调用方法
public int firstBadVersion(int n) {

int l = 1;
int r = n;

while (l < r) {
int mid = l + (r - l) / 2;
if (isBadVersion(mid)) {
r = mid - 1;
} else {
l = mid + 1;
}
}

// 判断为第一个错误的结果还是第一个错误的结果前面的版本,返回对应结果
return isBadVersion(l) ? l : l + 1;
}

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×