leetcode每日一练-第278题-第一个错误的版本

news2024/11/26 16:24:10

 

一、思路

二分查找——因为它可以快速地将版本范围缩小一半,从而更快地找到第一个坏版本。

二、解题方法

维护一个左边界 left 和一个右边界 right,在每一步循环中,我们计算中间版本 mid,然后检查它是否是坏版本。如果是坏版本,说明第一个坏版本在 mid 或者它之前,我们将 right 更新为 mid。如果不是坏版本,说明第一个坏版本在 mid 之后,我们将 left 更新为 mid + 1。最终,当 leftright 相等时,就找到了第一个坏版本。

三、code

// The API isBadVersion is defined for you.
// bool isBadVersion(int version);

class Solution {
public:
    int firstBadVersion(int n) {
        int left=1;//设定一个左边界 left 和一个右边界 right
        int right=n;
        while(left<right)
        {
            int mid=left+(right-left)/2;
            if(isBadVersion(mid))
            {
                right=mid;
            }
            else
            {
                left=mid+1;
            }
        }
        return left;//也可以是right。当 left 和 right 相等时,就找到了第一个坏版本。
        
    }
};

===================================================================== 

 ①

二分查找(Binary Search)是一种高效的搜索算法,适用于已排序的数据集。它的核心思想是将待查找的数据与数据集的中间元素进行比较,从而排除一半的数据,然后继续在剩余的一半中继续查找,以此类推,直到找到目标元素或者确定目标元素不存在。

二分查找的步骤如下:

  1. 确定查找范围的起始点和终点,通常是整个数据集的起始和终止位置。

  2. 计算中间元素的位置。这可以通过 (start + end) / 2 来获得,也可以使用 (start + end) >> 1 来获得,这两种方法在整数运算中可以避免溢出问题。

  3. 比较中间元素与目标元素的大小关系,如果相等,则找到了目标元素,算法结束。

  4. 如果中间元素比目标元素大,那么目标元素应该在左半部分,将终点位置更新为中间位置减一。

  5. 如果中间元素比目标元素小,那么目标元素应该在右半部分,将起始位置更新为中间位置加一。

  6. 重复步骤2到步骤5,直到起始位置大于终点位置,表示查找范围为空,目标元素不存在。

二分查找是一种时间复杂度为 O(log n) 的算法,因此在处理大规模数据时非常高效。然而,它要求数据集是已排序的,否则无法正确进行查找。

错误:使用线性搜索来解决这个问题,但是可能因为版本数量很多而导致超时。

// The API isBadVersion is defined for you.
// bool isBadVersion(int version);

class Solution {
public:
    int firstBadVersion(int n) {
        for (int i = 1; i <= n; ++i) {
            if (isBadVersion(i) == true) {
                return i;
            }
        }
        return -1; // 如果没有找到坏版本,可以根据题目要求返回一个特定值
    }
};
 

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

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

相关文章

【UE】AI导航,多个导航物体无法走到同一终点问题

如不需要开启导航物体的碰撞&#xff0c;则需要关闭Use RVOAvoidance 不然会导致多个导航物体无法到达同一个目标点&#xff0c;都在附近晃。无法结束寻路。 ue小白&#xff0c;判定导航终点的半径&#xff0c;没有找到。如果有大佬知道怎么设置请在评论区指出&#xff0c;谢…

Linux mmap系统调用视角看缺页中断

问题 1. mmap具体是怎么实现比read/write少一次内存copy的 2.mmap共享映射和私有映射在内核实现的时候到底有什么区别 3.mmap的文件映射和匿名映射在内核实现的时候到底有什么区别 4.父子进程的COW具体怎么实现的 概述 实际开发过程中经常使用或者看到mmap函数&#xff0…

实力认证!TDengine 入选 Gartner 中国数据分析与人工智能技术成熟度曲线

近日&#xff0c;国际权威研究机构 Gartner 发布了《2023 年中国数据分析及人工智能技术成熟度曲线》&#xff08;即《Hype Cycle for Data, Analytics and AI in China, 2023》&#xff09;报告&#xff0c;TDengine 成功入选实时数据管理领域代表产品。 作为评估全球新技术成…

HPRNet: Whole-Body 2D 姿态估计

HPRNet: Hierarchical Point Regression for Whole-Body Human Pose Estimation解析 摘要1. 简介2. Related Work2.1 Human Body Pose Estimation2.2 Whole-body Pose Estimation 3. Model3.1 全身关键点的层次回归3.2 足部关键点回归3.3 网络架构3.4 目标函数PCH and BKH >…

【MFC】05.MFC第一大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单&#xff0c;但是对于我们逆向人员来说&#xff0c;如果想要逆向MFC程序&#xff0c;那么我们就必须了解它背后的机制&#xff0c;这样我们才能够清晰地逆向出MFC程序&#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制&#xff1a;程序启动机…

《向量数据库指南》——Rockset 为实时数据库添加向量嵌入支持(一)

2023年4月18日,数据库供应商 Rockset 公布了对向量嵌入的支持,此举旨在使用户能够实时搜索和操作任何类型的数据。 位于加利福尼亚州圣马特奥的 Rockset 以前支持结构化和半结构化数据,让用户可以使用 SQL 和 NoSQL 实时搜索和分析数据。 现在,通过增加对向量嵌入的支持…

海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)

一、项目背景 需求:需要在公司的产品里集成海康威视摄像头的SDK,用于控制海康威视的摄像头。 拍照抓图、视频录制、云台控制、视频实时预览等等功能。 开发环境: windows-X64(系统) + Qt5.12.6(Qt版本) + MSVC2017_X64(使用的编译器) 海康威视提供了设备网络SDK,设备网…

2023暑假牛客多校6- E.Sequence

题目描述 You have an array of elements . For each task, you have three integers . Ask whether you can find an array of integers satisfy: are the multiplies of 2 Specially, if , it should satisfy is the multiply of 2 We define . If possible, print…

Java虚拟机怎样设置CLASSPATH的环境变量?

CLASSPATH环境变量用于保存一系列类包的路径&#xff0c;它和PATH环境变量的查看与配置方式完全相同。当Java虚拟机需要运行一个类时&#xff0c;会在CLASSPATH环境变量定义的路径下寻找所需的.class文件和类包。 为了让Java虚拟机能找到所需的class文件&#xff0c;就需要对C…

模拟实现消息队列项目(系列3) -- 服务器模块(硬盘管理)

目录 前言 1. 创建项目 2. 创建核心类 2.1 Exchange 2.2 MSQueue 2.3 Binding 2.4 Message 3. 数据库设计 3.1 SQLite 配置 3.2 Mapper层代码实现 3.2.1 创建表操作 3.2.2 交换机 队列 绑定的增加和删除 3.3 实现DataBaseManager 3.4 DataBaseManager单元测试 4.…

【JS】实现系统取色器

效果 使用环境说明 根据当前的信息&#xff0c;截至到 2023 年 8 月&#xff0c;以下是一些支持使用 new EyeDropper() 的主要浏览器&#xff08;可能还有其他浏览器也提供了类似的功能&#xff09;&#xff1a; Google Chrome&#xff1a;从 Chrome 94 版本开始引入了 new Ey…

Linux下共享windows 一键搞定

编写脚本 [rootlocalhost ~]# vim dd.sh#!/bin/bash yum -y install samba mkdir -p /home/shar sss dddecho " [share]comment Shared Folderpath /homebrowseable yeswritable yesguest ok yes " > /etc/samba/smb.confchmod x /home/* useradd qqqq s…

Qgis核密度分析

不建议使用Qgis进行核密度分析&#xff0c;建议使用arcgis&#xff0c;arcgis更简单。 arcgis核密度分析 Qgis核密度分析有两种&#xff1a; 法一:符号化&#xff0c;热图。 缺点&#xff1a;使用不方便&#xff0c;只适合看一下效果。 法二&#xff1a;工具栏搜索&#xff…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…

C语言标准定义的32个关键字

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。 …

PyTorch搭建神经网络

PyTorch版本&#xff1a;1.12.1PyTorch官方文档PyTorch中文文档 PyTorch中搭建并训练一个神经网络分为以下几步&#xff1a; 定义神经网络定义损失函数以及优化器训练&#xff1a;反向传播、梯度下降 下面以LeNet-5为例&#xff0c;搭建一个卷积神经网络用于手写数字识别。 …

日志分析和流量分析

目录 [陇剑杯 2021]日志分析&#xff08;问1&#xff09; [陇剑杯 2021]日志分析&#xff08;问2&#xff09; [陇剑杯 2021]日志分析&#xff08;问3&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问1&#xff09; [陇剑杯 2021]简单日志分析&#xff08;问3&#…

智慧水利整体解决方案[43页PPT]

导读&#xff1a;原文《智慧水利整体解决方案[43页PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的…

docker小白第一天

docker小白第一天 docker是什么docker理念容器与虚拟机比较docker能干什么docker官网介绍docker的基本组成docker平台架构 docker是什么 系统平滑移植&#xff0c;容器虚拟化技术。即源代码配置环境版本&#xff0c;打个包形成一个镜像文件&#xff0c;即软件带环境一起安装&a…

企业接口测试流程总结,你都走了哪些弯路?背锅不存在的...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 首先我们要明确&a…