【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] ,从某一个数开始往后就都变异了,以最少的遍历次数找到第一个变异的数。

【解析】

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

蛤?

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

【LeetCode】004 First Bad Version 寻找老鼠屎_第1张图片

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

【LeetCode】004 First Bad Version 寻找老鼠屎_第2张图片

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

【LeetCode】004 First Bad Version 寻找老鼠屎_第3张图片 错在哪呢……

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

【LeetCode】004 First Bad Version 寻找老鼠屎_第4张图片 有人和我一样错的感觉是真好

​问题出在,令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;

}

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

【LeetCode】004 First Bad Version 寻找老鼠屎_第5张图片

你可能感兴趣的:(【LeetCode】004 First Bad Version 寻找老鼠屎)