欢迎关注微信公众号:【没伞的孩子拼命跑】 和我的小伙伴们一块打卡吧

题目解析
题目翻译过来就是给你一个数组,大概像这样,FFFFFFTTTTTT,然后找第一个T的位置,很清晰了吧,就是用二分查找的方式,注意一下数据的范围就好了。
解题思路
这个题就没有什么解题思路了,就是最基本的二分方法,需要注意的是,这样写的话不会因为计算中间数超出数据表示范围,就一般不要这样写,这样的话在计算(l+r)的时候很容易超出int型的数据所能表示的范围。
代码和详细注释如下
//C++题解
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
class Solution {
public:
int firstBadVersion(int n) {
int l = 1;
int r = n;
while(l<r)
{
int mid = l + (r-l)/2;
//为什么不写成r = mid-1,因为我们是要找第一,
//我们只能确定目前r是T,不能确定r-1也是T
if(isBadVersion(mid))
r = mid;
else
l = mid+1;
}
return l;
}
};
通过情况

这篇博客介绍了如何运用二分查找算法解决寻找数组中第一个特定值的问题,例如在全是'F'的序列中找到第一个'T'。文章强调了在实现过程中避免整型溢出,并提供了详细的C++代码实现和注释。
159

被折叠的 条评论
为什么被折叠?



