刷题LeetCode:278.第一个错误的版本

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-bad-version/

题目描述

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。
由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数

题目分析

本意采用二分查找。

代码实现

public class DiYiGeCuoWuBanBen_278 {

    public static int BAD_VERSION;

    public static void main(String[] args) {
        DiYiGeCuoWuBanBen_278 erFenChaZhao_704 = new DiYiGeCuoWuBanBen_278();
        BAD_VERSION = 4;
        erFenChaZhao_704.firstBadVersion(5);
    }


    private boolean isBadVersion(int version) {
        if (version == BAD_VERSION) {
            return true;
        }
        return false;
    }


    /**
     * 时间复杂度:O(logn),其中 n 是定版本的数量。
     * 空间复杂度:O(1),只需要常数的空间保存变量。
     * @param n
     * @return
     */
    public int firstBadVersion(int n) {
        int leftIndex = 1;
        int rightIndex = n;

        // 循环直到  左右端点相同
        while (leftIndex < rightIndex) {
            int midIndex = rightIndex + (rightIndex - leftIndex) / 2;

            if (isBadVersion(midIndex)) {

                rightIndex = midIndex;
            } else {
                leftIndex = midIndex + 1;
            }
        }

        System.out.println(leftIndex);
        return leftIndex;


    }


}

复杂度

  • 时间复杂度:O(logN)。
  • 空间复杂度:O(1)。

好了,今天就到这里,感谢各位看官到这里,不如点个关注吧!

你可能感兴趣的:(刷题LeetCode:278.第一个错误的版本)