LeetCode 278. First Bad Version(第一个错误版本)

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

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

示例:

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

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

所以,4 是第一个错误的版本。 
  1. 若第m个版本出错,则第1个出错版本位于[l, m]之间:r = m
  2. 否则第一个出错版本位于[m+1, r]之间:l = m + 1

[********########] 就像这样的有序数组,找第一个 # 号

/* The isBadVersion API is defined in the parent class VersionControl.
      boolean isBadVersion(int version); */

public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        //数组为[1,2...n],isBadVersion函数参数为版本,是下标+1。所以让下标和值一样
        int left = 1, right = n;

        //当搜索空间只剩一个时,即为第一个错误版本
        while(left < right) {
            int mid = left + (right - left) / 2;
            
            if(isBadVersion(mid)) {
                right = mid;
            }
            else {
                left = mid + 1;
            }
        }
        return left;
    }
}
发布了581 篇原创文章 · 获赞 97 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/gx17864373822/article/details/104885999