LeetCode 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.

题意:

就是查找出现第一次badversion的那个位置。因为这个数列具有如下的特征,首先是就是从第i个开始之后的任意一个都是bad的,而且它要求查找的次数尽量少,如果采用一般的按顺序查找,必然出现超时的情况。仔细考虑这道题,其实因为有一点规律,那么就是相当于已经按照顺序排好了,那么就可以考虑用二分查找法来查找第一次出现bad的那个节点。所以这道题的思想就是二分查找,但是具体在执行二分查找的时候,还和我们平时的二分查找的方法有一点区别。

public class Solution extends VersionControl 
{
    public int firstBadVersion(int n) 
    {
        int low = 1;
        int high = n;
        int t = 1;
        int middle;
        while(low <= high)
        {
            middle = low + (high - low) / 2; 
            if(isBadVersion(middle) == false)
                low = middle + 1;
            else 
                high = middle - 1;
        }
        return low;
    }
}
这里的middle和我们普通的二分查找的还不太一样,是采用的一般的这种从低的往上加的策略。而在循环体中,则是采用两头夹逼的方式来寻找第一个出现bad的节点。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值