【LeetCode】004 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.

​有一个数列 [1, 2, ..., n] ,从某一个数开始往后就都变异了,以最少的遍历次数找到第一个变异的数。

【解析】

简单的二分法题目,送分题有没有!!

蛤?

​不阔能!难道有更高级的算法?!

​看了一眼高票答案之后……

​这尼玛不就是二分法么!!果然是我写错了么……

错在哪呢……

​直到我看到了这个回复……

有人和我一样错的感觉是真好

​问题出在,令mid=start+(end-start)/2时,不能讲其简写为mid=(start+end)/2,看起来两者没什么区别(对啊检查程序的时候,数学老师的音容笑貌时常浮现在我脑海。。。),实际上,系统计算(start+end)/2时可能已经超出整型的范围了

​【程序】

bool isBadVersion(int version);

int firstBadVersion(int n) {

    int A = 1, B = n, P;

    while(A < B){

       P = A + (B-A)/2;

       if(isBadVersion(P))

           B = P;

       else A = P+1;

    }

    return A;

}

​计算机的思维果然跟人类不一样啊……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值