题目
1.描述
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
2.示例
给定 n = 5,并且 version = 4 是第一个错误的版本。
调用 isBadVersion(3) -> false
调用 isBadVersion(5) -> true
调用 isBadVersion(4) -> true
所以,4 是第一个错误的版本。
3.思路
二分查找所要查找的值一般是确定的, 但本题的情景要查找的值不确定, 根据题意设置右指针指向mid
4.代码
public int firstBadVersion(int n) {
int low = 1, high = n;
while (low < high) {
int mid = low + (high - low) / 2;
if (isBadVersion(mid))
high = mid;
else
low = mid + 1;
}
return low;
}
本文介绍了一个算法问题:如何高效地找到一系列软件版本中首次出现故障的版本。利用二分查找法,可以在最少的API调用次数下定位到目标版本。
852

被折叠的 条评论
为什么被折叠?



