二分查找题目:第一个错误的版本

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:第一个错误的版本

出处:278. 第一个错误的版本

难度

3 级

题目描述

要求

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错误的。

假设你有 n \texttt{n} n 个版本 [1, 2, ..., n] \texttt{[1, 2, ..., n]} [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。

你可以通过调用接口 bool isBadVersion(version) \texttt{bool isBadVersion(version)} bool isBadVersion(version) 判断版本号 version \texttt{version} version 是否在单元测试中出错。实现一个函数查找第一个错误的版本。你应该尽量减少调用接口的次数。

示例

示例 1:

输入: n = 5, bad = 4 \texttt{n = 5, bad = 4} n = 5, bad = 4
输出: 4 \texttt{4} 4
解释:
调用 isBadVersion(3) → false \texttt{isBadVersion(3)} \rightarrow \texttt{false} isBadVersion(3)false
调用 isBadVersion(5) → true \texttt{isBadVersion(5)} \rightarrow \texttt{true} isBadVersion(5)true
调用 isBadVersion(4) → true \texttt{isBadVersion(4)} \rightarrow \texttt{true} isBadVersion(4)true
所以, 4 \texttt{4} 4 是第一个错误的版本。

示例 2:

输入: n = 1, bad = 1 \texttt{n = 1, bad = 1} n = 1, bad = 1
输出: 1 \texttt{1} 1

数据范围

  • 1 ≤ bad ≤ n ≤ 2 31 − 1 \texttt{1} \le \texttt{bad} \le \texttt{n} \le \texttt{2}^\texttt{31} - \texttt{1} 1badn2311

解法

思路和算法

bad \textit{bad} bad 表示第一个错误的版本。对于某个在范围 [ 1 , n ] [1, n] [1,n] 中的版本,使用该版本调用接口得到结果。如果该版本是错误的,则 bad \textit{bad} bad 小于等于该版本;如果该版本是正确的,则 bad \textit{bad} bad 大于该版本。由于可以根据调用接口的结果缩小查找范围,因此可以使用二分查找得到 bad \textit{bad} bad

由于 bad \textit{bad} bad 一定在范围 [ 1 , n ] [1, n] [1,n] 内,因此初始时二分查找的范围的下界和上界是 low = 1 \textit{low} = 1 low=1 high = n \textit{high} = n high=n

每次查找时,取 mid \textit{mid} mid low \textit{low} low high \textit{high} high 的平均数向下取整,对 mid \textit{mid} mid 调用接口,根据结果调整二分查找的范围。

  • 如果 mid \textit{mid} mid 是错误的,则 bad \textit{bad} bad 小于等于 mid \textit{mid} mid,因此在范围 [ low , mid ] [\textit{low}, \textit{mid}] [low,mid] 中继续查找。

  • 如果 mid \textit{mid} mid 是正确的,则 bad \textit{bad} bad 大于 mid \textit{mid} mid,因此在范围 [ mid + 1 , high ] [\textit{mid} + 1, \textit{high}] [mid+1,high] 中继续查找。

low = high \textit{low} = \textit{high} low=high 时,结束查找,此时 low \textit{low} low 即为 bad \textit{bad} bad,返回 low \textit{low} low

代码

public class Solution extends VersionControl {public int firstBadVersion(int n) {int low = 1, high = n;while (low < high) {int mid = low + (high - low) / 2;if (isBadVersion(mid)) {high = mid;} else {low = mid + 1;}}return low;}
}

复杂度分析

  • 时间复杂度: O ( log ⁡ n ) O(\log n) O(logn)。二分查找的次数是 O ( log ⁡ n ) O(\log n) O(logn),每次查找的时间是 O ( 1 ) O(1) O(1),时间复杂度是 O ( log ⁡ n ) O(\log n) O(logn)

  • 空间复杂度: O ( 1 ) O(1) O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/15275.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数(c基础)

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>//统计从输入的两个整数a和b所确定的范围内(0 ~ 9)出现的次数 int main() {//创建两个变量输入范围int a 0;int b 0;printf("请输入两个整数:>");scanf("%d %d", &a, &b);//保证 a &…

ssm103宠物领养系统+vue(论文+源码)_kaic

毕业设计&#xff08;论文&#xff09; 宠物领养系统的设计与实现 学生姓名&#xff1a; 二级学院&#xff1a; 班级名称&#xff1a; 指导教师&#xff1a; 年 月 日 录 摘 …

expo5.2运行web报错Cannot find module ‘react‘

修改app.json中的web output 配置为 ‘single’ 可以解决 expo run web 这个错误问题 "web": {"bundler": "metro","output": "single","favicon": "./assets/images/favicon.png"},相关链接&#xff1…

边缘提取函数 [OPENCV--2]

OPENCV中最常用的边界检测是CANNY函数 下面展示它的用法 通常输入一个灰度图像&#xff08;边界一般和颜色无关&#xff09;这样也可以简化运算cv::Canny(inmat , outmat , therhold1, therhold2 ) 第一个参数是输入的灰度图像&#xff0c;第二个是输出的图像这两个参数都是引用…

【9688】基于springboot+vue的CSGO赛事管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取免费源码 项目描述 在世界范围内&#xff0c;CSGO赛事管理系统已经得到…

基于HTTP编写ping操作

基于HTTP编写ping操作 前言 在上一集我们就完成了创建MockServer的任务&#xff0c;那么我们就可以正式开始进行网络的通讯&#xff0c;那么我们今天就来基于HTTP来做一个客户端ping服务端的请求&#xff0c;服务端返回pong的响应。 需求分析 基于HTTP&#xff0c;实现ping…

数学几百年重大错误:将无穷多各异直线误为直线y=x

黄小宁 h定理&#xff1a;点集AB≌B的必要条件是A≌B。 证&#xff1a;若AB则A必可恒等变换地变为BA≌A&#xff0c;而恒等变换是保距变换。证毕。 直线Z&#xff1a;x-y0&#xff08;x的变域是x轴&#xff09;可放大&#xff08;拉伸&#xff09;变换为直线L&#xff08;不≌Z…

力扣 LeetCode 459. 重复的子字符串(Day4:字符串)

解题思路&#xff1a; KMP算法 len - next[len - 1]作为最小公共子串的长度 len % (len - next[len - 1]) 0检测能否构成重复串&#xff0c;能构成整数倍&#xff0c;代表可以构成 注意&#xff1a; i 从 j 的下一位开始&#xff0c;即 i 初始化为 1 next[len - 1]需要大…

【MMIN】缺失模态想象网络用于不确定缺失模态的情绪识别

代码地址&#xff1a;https://github.com/AIM3RUC/MMIN abstract&#xff1a; 在以往的研究中&#xff0c;多模态融合已被证明可以提高情绪识别的性能。然而&#xff0c;在实际应用中&#xff0c;我们经常会遇到模态丢失的问题&#xff0c;而哪些模态会丢失是不确定的。这使得…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟&#xff0c;由于内部HSI存在较大的误差&#xff0c;因此我们在系统完成上电初始化&#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟&#xff0c;那么我…

离散数学笔记

第 1 章 数理逻辑 1.1 命题 1.1.1 基本概念 非真即假的陈述句称作命题 作为命题的陈述句所表达的判断结果称作命题的真值 真值只取两个值&#xff1a;真&#xff08;1或T&#xff09;或假&#xff08;0或F&#xff09; 真值为真的命题称作真命题&#xff0c;真值为假的命…

华大严选生物基因科技有限公司:基因检测行业十佳优质品牌

在 DNA 基因检测领域&#xff0c;华大严选生物基因科技有限公司以其卓越的品质和专业的服务脱颖而出&#xff0c;荣获 DNA 基因检测行业十佳优质品牌。 华大严选拥有先进的技术和设备&#xff0c;确保检测结果的准确性和可靠性。其专业的团队由经验丰富的科学家和技术人员组成…

spring boot整合https协议

注意&#xff1a;此方式是跳过SSL认证的。 整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这…

python3 pyinstaller编译相关 和 python2兼容的一些问题

一: python2 和 python3的兼容问题 如果本地同时安装了python2 和 python3, 且都配置了环境变量的情况下, 在命令行里如何区分呢? python2: py -2 python3: py -3如何区分python2的pip 与 python3 的pip呢 python2: pip install xxx python3: pip3 install xxx二: pyin…

互联网行业面对大数据时代新挑战如何实现数据高速传输

随着互联网技术的飞速发展&#xff0c;我们正处在一个数据量爆炸增长的时代。据IDC预测&#xff0c;到2024年&#xff0c;全球数据总量将飙升至159.2ZB&#xff0c;而到了2028年&#xff0c;这一数字更是将达到384.6ZB。这样的增长速度&#xff0c;无疑为互联网行业带来了巨大的…

Python自动化小技巧24——实现自动化输出模板表格报告

背景 很多人拿到数据excel文件&#xff0c;然后要写报告&#xff0c;做表格&#xff0c;要各种计算&#xff0c;各种排序&#xff0c;分组聚合&#xff0c;数据透视&#xff0c;然后合并单元格&#xff0c;添加边框&#xff0c;加粗&#xff0c;添加显示规则&#xff0c;添加数…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时&#xff0c;通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例&#xff0c;用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据&#xff0c;并且需要API密钥进行认证。 步…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中&#xff0c;对电流和温度的实时监控是…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…