Every day a leetcode
题目来源:278. 第一个错误的版本
解法1:二分查找
我们发现:
当一个版本为正确版本,则该版本之前的所有版本均为正确版本;当一个版本为错误版本,则该版本之后的所有版本均为错误版本。
我们可以利用这个性质进行二分查找。
具体地,将左右边界分别初始化为 1 和 n ,其中 n 是给定的版本数量。
设定左右边界之后,每次我们都依据左右边界找到其中间的版本 mid ,检查其是否为正确版本。
- 如果该版本为正确版本,那么第一个错误的版本必然位于该版本的右侧,我们缩紧左边界
- 否则第一个错误的版本必然位于该版本及该版本的左侧,我们缩紧右边界。
代码:
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);
int firstBadVersion(int n) {
int left=1;
int right=n;
int mid;
while(left<right)
{
mid=left+(right-left)/2;
if(isBadVersion(mid)) right=mid;
else left=mid+1;
}
return left;
}
注意:

mid=(left+right)/2会报错。
结果:

本文介绍了如何运用二分查找算法来解决LeetCode的278题——第一个错误的版本。通过分析问题特性,确定正确版本与错误版本的性质,设置左右边界并不断调整,最终找到第一个错误的版本。代码实现中,特别注意了防止整数溢出的细节。这种方法高效且简洁。

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



