zoukankan      html  css  js  c++  java
  • 力扣刷题记录(2020-1-27) LC第一个错误的版本 二分查找

    题目  LC第一个错误的版本

    你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。

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

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

    示例:

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

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


    题目分析:找到第一个出现错误的版本==找到第一个出现的true 

    false false false true .....true


    思路:使用二分查找,

    mid==true mid-1=false return mid
    mid==true mid -1 =true right = mid-1
    mid==false mid +1 =true return mid+1
    mid==false mid+1= false left=mid+1

    具体代码:

    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)){
                     if(isBadVersion(mid-1)){
                          right = mid -1;
                     }else{
                         return mid;
                     }
                       
                }else{
                    if(isBadVersion(mid+1)){
                        return mid+1;
                    }else{
                        left = mid+1;
                    }
                }
            }
            return -1;
        }
    }

    执行用时:29 ms, 在所有 Java 提交中击败了6.17%的用户
    内存消耗:35.5 MB, 在所有 Java 提交中击败了5.28%的用户               瑟瑟发抖

     
     
  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/spx88/p/14339953.html
Copyright © 2011-2022 走看看