【LeetCode】004 First Bad Version 寻找老鼠屎

来源:互联网 发布:mac 大写键切换输入法 编辑:程序博客网 时间:2024/05/01 05:43

【题目】

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
原创粉丝点击