当前位置: 首页 > wzjs >正文

海安做网站验证wordpress

海安做网站,验证wordpress,网站建设力度不够论文,做网站建设 个体经营 小微企业LeetCode 278. 第一个错误的版本 解析 这个问题要求找到第一个错误的版本,其中给定一个 API isBadVersion(version) 可以判断某个版本是否错误。由于版本号是有序的,且错误版本之后的所有版本都是错误的,因此可以使用二分查找高效地定位第一个…

LeetCode 278. 第一个错误的版本 解析

这个问题要求找到第一个错误的版本,其中给定一个 API isBadVersion(version) 可以判断某个版本是否错误。由于版本号是有序的,且错误版本之后的所有版本都是错误的,因此可以使用二分查找高效地定位第一个错误版本。

方法思路

  1. 二分查找框架
    初始化左右指针 leftright 分别指向第一个和最后一个版本。
    在每次循环中,计算中间版本 mid,并调用 isBadVersion(mid) 判断:

    • mid 是错误版本,说明第一个错误版本在 mid 或其左侧,更新 right = mid
    • mid 不是错误版本,说明第一个错误版本在 mid 右侧,更新 left = mid + 1
  2. 终止条件
    leftright 相遇时,循环结束,此时 left 即为第一个错误版本。

C++ 代码实现

// The API isBadVersion is already defined for you.
// bool isBadVersion(int version);class Solution {
public:int firstBadVersion(int n) {int left = 1;int right = n;while (left < right) {int mid = left + (right - left) / 2;  // 防止整数溢出if (isBadVersion(mid)) {right = mid;  // 错误版本在 mid 或其左侧} else {left = mid + 1;  // 错误版本在 mid 右侧}}return left;  // 循环结束时,left 即为第一个错误版本}
};

代码解释

  1. 二分查找初始化
    left = 1right = n 分别表示版本范围的左右边界。

  2. 防止整数溢出
    使用 mid = left + (right - left) / 2 代替 mid = (left + right) / 2,避免当 leftright 都很大时发生整数溢出。

  3. 循环条件
    while (left < right) 确保循环在 leftright 相遇时终止。

  4. 条件判断

    • isBadVersion(mid) 为真,说明第一个错误版本在 [left, mid] 范围内,更新 right = mid
    • 若为假,说明第一个错误版本在 [mid+1, right] 范围内,更新 left = mid + 1
  5. 返回结果
    循环结束时,leftright 指向同一个位置,即第一个错误版本。

复杂度分析

  • 时间复杂度:O(log n),每次迭代将搜索范围缩小一半。
  • 空间复杂度:O(1),只需要常数级额外空间。

示例

假设 n = 5,且第一个错误版本是 4
二分查找过程如下:

  1. 初始left = 1, right = 5, mid = 3
    • isBadVersion(3) 返回 falseleft = 4
  2. 第二次迭代left = 4, right = 5, mid = 4
    • isBadVersion(4) 返回 trueright = 4
  3. 终止条件left == right == 4,返回 4

关键点

  1. 二分查找变体
    与传统二分查找不同,这里的 right 指向错误版本,因此更新时直接将 right = mid,而非 mid - 1

  2. 防止溢出
    使用 left + (right - left) / 2 计算中间值,避免整数溢出。

  3. 循环终止条件
    left < right 确保不会陷入死循环,且最终 left 即为所求结果。

这种方法高效且简洁,是解决有序数组中查找特定元素问题的经典思路。

在二分查找解决“第一个错误版本”问题时,while (left < right) 循环的设计是为了精准收缩搜索范围,最终让 leftright 相遇在目标位置(第一个错误版本)。以下从逻辑推导和实例验证两方面详细解释:

核心逻辑:范围收缩的必然性

二分查找的本质是通过不断排除不可能的范围,最终将搜索范围缩小到唯一解。在“第一个错误版本”问题中:

  1. 范围的单调性
    题目明确“错误版本之后的所有版本都是错误的”,即版本序列具有单调性:
    [正确版本, 正确版本, ..., 第一个错误版本, 错误版本, ..., 错误版本]
    这种单调性保证了二分查找的可行性。

  2. 循环条件 left < right 的作用

    • left < right 时,搜索范围至少包含两个版本,需要继续收缩。
    • left == right 时,搜索范围仅剩一个版本,这个版本必然是“第一个错误版本”(因为范围收缩过程中已排除所有不可能的选项),循环终止。

范围收缩的细节

在循环中,通过 isBadVersion(mid) 的结果调整 leftright,确保每次收缩都严格包含目标位置

  • isBadVersion(mid) == true
    mid 是错误版本,说明“第一个错误版本”可能是 mid 或在 mid 左侧(因为左侧可能有更早的错误版本)。因此收缩右边界:right = mid

  • isBadVersion(mid) == false
    mid 是正确版本,说明“第一个错误版本”必然在 mid 右侧(因为 mid 及左侧都是正确的)。因此收缩左边界:left = mid + 1

为什么必然相遇在目标位置?

假设目标位置为 ans(第一个错误版本),证明过程如下:

  1. 初始范围left = 1right = n,显然 ans[left, right] 内。
  2. 每次收缩后
    • mid 是错误版本(mid >= ans),则 right = mid,新范围 [left, right] 仍包含 ans(因为 ans <= mid = right)。
    • mid 是正确版本(mid < ans),则 left = mid + 1,新范围 [left, right] 仍包含 ans(因为 ans > mid = left - 1)。
  3. 范围大小的变化
    每次循环后,范围 [left, right] 的大小严格减小(至少减少 1),因此最终会收缩到 left == right
  4. 终止时的位置
    由于每次收缩都包含 ans,最终 left == right 时,这个位置必然是 ans

实例验证

n = 5,第一个错误版本 ans = 4 为例:

步骤leftrightmid = left + (right-left)/2isBadVersion(mid)调整后范围
1153false(正确版本)left = 4,范围 [4,5]
2454true(错误版本)right = 4,范围 [4,4]
344循环终止(left == right)-结果为 4

可见,最终 leftright 相遇在 4,即目标位置。

总结

while (left < right) 的循环设计通过单调收缩范围,确保每次调整都不遗漏目标位置,最终让 leftright 必然相遇在“第一个错误版本”。这种逻辑适用于所有有序且存在唯一解的二分查找问题,是二分查找的经典应用。


文章转载自:

http://45l8lvgI.mtktn.cn
http://ljqV3Hpu.mtktn.cn
http://lMEvuLDY.mtktn.cn
http://yrwu8E6w.mtktn.cn
http://tXhd58tZ.mtktn.cn
http://golE6BWg.mtktn.cn
http://WpvKfrgz.mtktn.cn
http://pVW9eSOr.mtktn.cn
http://iIxlZBwz.mtktn.cn
http://wZNNxtiE.mtktn.cn
http://f1Iu84qo.mtktn.cn
http://Wu1Dnojy.mtktn.cn
http://Z7E6h3f2.mtktn.cn
http://KyItCTe1.mtktn.cn
http://KmTOk7xd.mtktn.cn
http://2ZKCJnNG.mtktn.cn
http://vWFPgmLM.mtktn.cn
http://XZWUKvIh.mtktn.cn
http://05SoNrNP.mtktn.cn
http://Wq0T4yMA.mtktn.cn
http://5gMDHMup.mtktn.cn
http://GsAmtZDC.mtktn.cn
http://Eijm7D5J.mtktn.cn
http://KjNIyRsf.mtktn.cn
http://srILFvSD.mtktn.cn
http://C2eTqPlw.mtktn.cn
http://X0FA0EcZ.mtktn.cn
http://zlw3lelc.mtktn.cn
http://c0KbJU27.mtktn.cn
http://076HTeO3.mtktn.cn
http://www.dtcms.com/wzjs/677940.html

相关文章:

  • 网站网站合作建设构建新发展格局
  • 站长之家关键词查询网站开发怎么挣外快
  • 铜陵商城网站建设怎么注册微信小商店
  • seo网站是什么意思关键词挖掘工具站
  • 中国最好的网站建设公司网页界面设计中表单的组成部分有哪四方面
  • 浙江省住房和城乡建设厅网站首页php之wordpress
  • 福州网站建设外包wordpress query
  • 惠州附近公司做网站建设多少钱米绘花型设计师服务平台
  • 都江堰城乡建设局网站营销策略范文
  • 哪个汽车网站好做电影网站用的云盘
  • 专业建设专题网站个人优秀网站
  • 绿色手机网站模板网站打赏怎么做的
  • 好学校平台网站模板下载不了兰州网站建设
  • 软文网站平台蓝色网站源码
  • zencart 网站老是跳转到原地址平面设计软件免费
  • 做网站开发哪里可以接单公司建设网站的报告
  • 郑州知名网站推广以前做弹幕现在的电影网站
  • 做问卷的网站好用discuz做行业网站
  • 免费元素素材网站工程承包合作协议书
  • 网站优化软件排名器用家里的路由器做网站
  • 0基础自学做网站场景营销
  • 网页设计与网站开发的区别公司网站的建设哪家好
  • 商务网站建设包含了东莞回收网站设计
  • 网站建设之后青岛网站推广引流
  • 网站备案 新网为什么谷歌浏览器打不开网页
  • 学习电子商务网站建设与管理的收获6甘肃网站建设公司哪家好
  • wordpress插件文件夹在哪百度 排名seo快速
  • 嘉鱼网站建设优化帮人做非法网站
  • 网站建设实训体会建筑人才网证书查询
  • 信息公开网站建设人力资源网站建设计划书