Leetcode278. 第一个错误的版本

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

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会报错。

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值