2025年-G14-Lc88-278.第一个坏版本 -java版
1.题目描述
第一个坏版本
你是一名产品经理,目前领导一个团队开发新产品。不幸的是,你产品的最新版本未通过质量检查。由于每个版本都是基于前一个版本开发的,所以坏版本之后的所有版本也都是坏的。假设你有 n 个版本 [1, 2, …, n],你想找出第一个坏版本,它导致后面所有版本都变坏。给你一个 API bool isBadVersion(version),它返回版本是否坏。实现一个函数来查找第一个坏版本。你应该尽量减少对 API 的调用次数。
2.思路
用二分查找,如果中间mid是坏的,那么所以第一个坏版本在mid的左边。
如果中间mid是好的,那么第一个坏的版本在mid的右边。当left和right重合时,left就是第一个坏版本。
3.java代码
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left=1;
int right=n;
while(left<right)
{
int mid=left+(right-left)/2;
if(isBadVersion(mid))
{
right=mid;//如果该元素是坏元素,所以要向左边寻找坏元素,所以右指针往左
//right = mid; 是正确的选择,因为我们在寻找第一个坏版本时,如果 mid 是坏版本,它可能就是第一个坏版本,因此需要保留 mid 继续查找。
}
else//如果该元素不是坏元素,所以要向右边寻找坏元素,所以左指针往右
{
left=mid+1;
}
}
return left; //当left==right的时候, 返回第一个坏版本
}
}