zoukankan      html  css  js  c++  java
  • 278. First Bad Version

    题目:

    You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.

    Suppose you have n versions [1, 2, ..., n] and you want to find out the first bad one, which causes all the following ones to be bad.

    You are given an API bool isBadVersion(version) which will return whether version is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.

    链接: http://leetcode.com/problems/first-bad-version/

    题解:

    找到First Bad Version,这里我们使用Binary Search就可以了。

    Time Complexity - O(logn), Space Complexity - O(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) {
            int lo = 1, hi = n;
            
            while(lo <= hi) {
                int mid = lo + (hi - lo) / 2;
                if(isBadVersion(mid)) {
                    hi = mid - 1;
                } else {
                    lo = mid + 1;
                }
            }
            
            return lo;
        }
    }

    二刷:

    二分搜索查找bad version的左边界。在找到badversion的时候我们让hi = mid - 1,否则lo = mid + 1,  最后返回lo就是第一个badversion的地方。

    Java:

    Time Complexity - O(logn), Space Complexity - O(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) {
            if (n < 1) {
                return 1;
            }
            int lo = 1, hi = n; 
            while (lo <= hi) {
                int mid = lo + (hi - lo) / 2;
                if (!isBadVersion(mid)) {
                    lo = mid + 1;
                } else {
                    hi = mid - 1;
                }
            }
            return lo;
        }
    }

    三刷:

    Binary Search查找左边界。举个例子 {g, b, b, b, b}就很好理解了。lo和hi相等时hi--,所以我们最后返回lo就可以了

    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) {
            if (n < 2) return 1;
            int lo = 1, hi = n;
            while (lo <= hi) {
                int mid = lo + (hi - lo) / 2;
                if (isBadVersion(mid)) hi = mid - 1;
                else lo = mid + 1;
            }
            return lo;
        }
    }

    Update:

    /* The isBadVersion API is defined in the parent class VersionControl.
          boolean isBadVersion(int version); */
    
    public class Solution extends VersionControl {
        public int firstBadVersion(int n) {
            if (n < 1) return n;
            int lo = 1, hi = n;
            while (lo <= hi) {
                int mid = lo + (hi - lo) / 2;
                if (isBadVersion(mid)) hi = mid - 1;
                else lo = mid + 1;
            }
            return lo;
        }
    }

    Reference:

  • 相关阅读:
    js怎么通过逗号将string转换成数组
    设置mysql数据库为只读
    python 关于django 2.X from django.contrib.auth.views import login
    python Django2.X,报错 ‘learning_logs ’is not a registered namespace,如何解决?
    python django2.x报错No module named 'django.core.urlresolvers'
    python Django2.0如何配置urls文件
    VMware vSphere 组件和功能
    VMware vSphere Client的简单使用教程
    python 逻辑运算 ‘and’ ,'or' 在实战中的作用,代替if语句。
    python_urllib2:urlerror和httperror
  • 原文地址:https://www.cnblogs.com/yrbbest/p/5034848.html
Copyright © 2011-2022 走看看