leetcode--278. First Bad Version

来源:互联网 发布:分布式关系型数据库 编辑:程序博客网 时间:2024/06/05 10:36

题目:

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.

C++实现:

// Forward declaration of isBadVersion API.bool isBadVersion(int version);class Solution {public:    int firstBadVersion(int n) {        //search range begin~end        int begin = 1;        int end = n;        int badVersion = -1;        int num = int(log(float(n))/log(2.0)) + 2;//iterator number        if (isBadVersion(begin)) {return begin;}//for no bad version        if (!(isBadVersion(end)))  {return -1;}//for no good version        for (int i=1; i<=num; i++)        {            //起始点是不是bad version            if (isBadVersion(begin+1))            {                badVersion = begin+1;                break;            }            //结尾处是不是good version            if ((!(isBadVersion(end-1))))            {                badVersion = end;                break;            }            //二分法缩小范围            if (isBadVersion(int(begin/2+end/2)))            {                end = int(begin/2+end/2);            }            else            {                begin = int(begin/2+end/2);            }        }        return badVersion;    }};
0 0