题目: 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数
示例1: 输入:n = 5, bad = 4 输出:4
示例2: 输入:n = 1, bad = 1 输出:1
代码实现
第一次利用二分进行查找。结果竟然只打败了6%的人。感觉有点离谱。再次审题发现 你应该尽量减少对调用 API 的次数。 虽然和第二种方法思路一样但是每次都需要至少两次调用太多了。
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */publicclassSolutionextendsVersionControl{publicintfirstBadVersion(int n){int index, low =1, high = n-1;while(low<=high){
index = low +((high-low)>>1);if(!isBadVersion(index)&&isBadVersion(index+1))return index +1;elseif(isBadVersion(index))
high = index -1;else
low = index +1;}return1;}}
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */publicclassSolutionextendsVersionControl{publicintfirstBadVersion(int n){int index, low =1, high = n;while(low<high){
index = low +((high-low)>>1);if(isBadVersion(index))
high = index;else
low = index +1;}return high;//low可以}}
publicintfirstBadVersion(int n){int index, low =1, high = n;while(low<=high){
index = low +((high-low)>>1);if(isBadVersion(index))
high = index-1;else
low = index +1;}return low;//只能是low此时 low位置为true, hight为false}