您的位置:首页 > 其它

LeetCode278 二分查找

2016-02-01 19:42 344 查看
题目大意:有一个1-n的序列,其中中间从某一个数开始出现坏的状况,如果这个数坏了,后面所有的数都是坏的。判断一个数是否坏给定了API函数,让你设计一个算法,使得调用这个API isBadNumber()函数次数最少。

题解:首先拿在手里,最容易想到的就是二分查找。1-----------------n,low=1;high=n;mid=low+(high-low)/2;此时当n为偶数时,mid为中间靠左那个数,这样如果isBadNumber(mid)为真,表示这个数是坏的,那么就将mid=high;如果为假,那么表示这个数是好的,那么mid=low+1;最后return low;

代码如下:
// Forward declaration of isBadVersion API.
bool isBadVersion(int version);

class Solution {
public:
int firstBadVersion(int n) {
//二分查找
int low = 1, high = n, mid;
if (n == 1) return 1;
while (low<high){
mid = low + (high - low) / 2;
if (isBadVersion(mid) == 0){
//如果是好的,low就往上提
low = mid + 1;
}
else if (isBadVersion(mid) == 1){
//如果是坏的,high就往下提
high = mid;
}
}
return low;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: