题目
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;
}