LeetCode之二分查找实战2之第一个错误的版本(278)、猜数字大小(374)

2023-05-16

二分查找2

  • 1、第一个错误的版本(278)
  • 2、猜数字大小(374)

1、第一个错误的版本(278)

题目描述:

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

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

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

在这里插入图片描述
题目链接

思路分析

1、由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。一带而发,因此可以用二分查找方法解决此题。
2、对中间值mid调用 isBadVersion(),如果返回False,则说明mid左半部分的版本均未出错,则在其右半部分继续二分查找,否则在左半部分查找。
【python3代码实现】

# The isBadVersion API is already defined for you.
# @param version, an integer
# @return a bool
# def isBadVersion(version):

class Solution:
    def firstBadVersion(self, n):
        """
        :type n: int
        :rtype: int
        """
        left=0
        right=n
        while left<right:
            mid=left+(right-left)//2
            if isBadVersion(mid):
                right=mid
            else:
                left=mid+1
        return left#或者right,因为终止条件是left==right

2、猜数字大小(374)

题目描述:

【简单题】
在这里插入图片描述
题目链接

思路分析

-1 : 你猜测的数字比系统选出的数字大
1 : 你猜测的数字比系统选出的数字小
0 : 恭喜!你猜对了!

显然可以使用二分查找法。

# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num: int) -> int:

class Solution:
    def guessNumber(self, n: int) -> int:
        left = 0
        right = n
        while left<=right:
            mid=left+(right-left)//2
            if guess(mid) == 0:
                return mid
            elif guess(mid)==1:
                left=mid+1
            else:
                right=mid-1

另一种写法

# The guess API is already defined for you.
# @param num, your guess
# @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
# def guess(num: int) -> int:

class Solution(object):
    def guessNumber(self, n):
        left = 1
        right = n
        while left < right:
            # mid = left + (right - left) // 2
            mid = (left + right) >> 1
            if guess(mid) == 1:
                # 中位数比猜的数小,因此比中位数小的数包括中位数都不是目标元素
                left = mid + 1
            else:
                right = mid
        # 最后剩下的数一定是所求,无需后处理
        return left

中位数的计算方法:

1、mid = (left + right) / 2; 是初级写法,是有 bug 的:有可能会溢出。

2、 mid = left + (right - left) / 2; 是正确的写法,考虑到了整型溢出的风险;

3、mid = (low + high) >> 1; 右移运算符>>,运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode之二分查找实战2之第一个错误的版本(278)、猜数字大小(374) 的相关文章

  • LibTorch1.7.1: error: ‘min_values’ is not a member of ‘at’

    错误描述 xff1a 原来用的libtorch的版本是1 5 0的 xff0c 今天换成了最新的1 7 1 xff0c 就报了这个错误 xff1a error min values is not a member of at 解决方法 xf
  • Github使用指南

    文章目录 注册成为用户GitHub功能及常用词汇板块说明Your profile使用仓库上传资源查找资源 注册成为用户 首次使用GitHub并准备长期使用需要先注册 xff0c 当然也可以以游客的方式进行浏览 登录官网GitHub Wher
  • 三孔插座接线方法(上地,左零,右火)

    三孔插座接线方法 一般三孔插座的线序 xff0c 如下图所示 xff1a 上 xff1a 地线 xff08 保护地 xff09 左 xff1a 零线 右 xff1a 火线 xff08 相线 xff09 正确的接接线方法 错误的接线方法 xf
  • CAN总线详解

    CAN总线协议 要了解报文数据帧的直接看第三点 1 CAN简介 CAN controller area network 控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线 其特点有 xff1a 总线上节点不分主
  • 【FreeRTOS】2. SVC系统调用

    SVC系统调用 问题 xff1a RTOS内核在何时去产生一个SVC系统调用 xff1f SVC中断服务里面使用的是MSP堆栈指针 xff0c 内核在何时切换为PSP指针 xff1f 1 产生SVC系统调用 FreeRTOS启动调度器的时候
  • 【FreeRTOS】3. PendSV异常

    PendSV异常 问题 xff1a 怎么触发PendSV异常 xff1f 何时使用MSP何时切换PSP xff1f PendSV如何实现上下文切换 xff1f 1 触发PendSV异常 在RTOS内核中 xff0c 任务切换的原理是 xff
  • PID控制器的介绍

    PID 控制算法介绍 在工程实际中 xff0c 应用最为广泛的调节器控制规律为比例 积分 微分控制 xff0c 简称 PID 控制 xff0c 又称 PID 调节 PID 控制器问世至今已有近 70 年历史 xff0c 它以其结构简单 稳定
  • 【智能车】图像二值化算法--大津法OTSU

    图像二值化算法 大津法OTSU 大津算法是一种图像二值化算法 xff0c 作用是确定将图像分成黑白两个部分的阈值 大津法是针对灰度值进行阈值分割二值化 xff0c 如果是彩色图像的话需要先转化成灰度图再进行计算 方差越大 xff0c 相关性
  • 【Linux学习笔记】9. Linux打包压缩解压缩命令tar

    LInux打包命令tar 一般形式 xff1a span class token function tar span cvf xxx tar dir span class token comment 将 dir 目录打包到 xxx tar
  • 0.96OLED 4针IIC STM32-HAL库版本(附源码)

    0 96OLED 4针IIC STM32HAL库版本 OLED源码放在文章末 xff0c 有需要自己下滑取用即可 关于如何移植到自己定义的引脚上也做了说明 另外 xff0c 本人在代码中封装了一个OLED显示的接口 xff0c 方便开发者对
  • 【智能车】模糊PID控制原理详解与代码实现

    模糊PID控制 本文主要由三部分构成 xff1a 模糊PID控制器的原理 xff0c 模糊PID控制器C 43 43 的实现与测试 一 模糊PID原理 模糊PID控制流程如下图所示 xff0c 把目标值 Xtarget 与输出值 Xout
  • ubnutu: 编译libtorch有关的代码时opencv报错-undefined reference to `TIFF**********@LIBTIFF_4.0‘

    报错如下 xff1a 25 Linking CXX executable yolov4 usr local lib libopencv world so 3 4 10 undefined reference to 96 TIFFReadDi
  • 【Linux环境配置】6. 解决uboot无法ping通Ubuntu虚拟机

    开发环境 使用的板子为正点原子的Alpha Mini板 xff0c 教材为正点原子配套的驱动开发指南v1 6 问题 启动uboot后到学习网络命令时 xff0c 始终无法ping通服务器主机 其中 xff0c serverip ipaddr
  • 【Linux环境配置】7. Linux部署code-server

    安装 code server 两种方法 xff0c 一种是在线安装 xff0c 另一种是本地安装 因为主机访问github可能会报443错误 xff0c 因此这里我推荐使用本地安装方法 xff01 本地安装方法 进入github xff0c
  • 0.96OLED 4针IIC STM32-标准库版本(附源码)

    0 96OLED 4针IIC STM32标准库版本 在前面已经介绍过 xff0c 这里就不多说了 xff0c 详情请见 xff1a 0 96OLED 4针IIC STM32HAL库版本 另外 xff0c 本人在代码中封装了一个OLED显示的
  • 推荐系统论文重要的三个指标——Recall、NDCG、RMSE

    1 Recall Recall xff08 召回率 xff09 大小反应了用户感兴趣的信息有多少被我们感知到了 xff1b R e c a l l
  • 手机飞行模式这么厉害!现在才知道,每天都能用到

    手机飞行模式是大家经常使用的功能 xff0c 除了屏蔽信号以外 xff0c 这5点功能你都知道吗 xff0c 下面一起来看看 1 超级省电 当我们遇到手机没电的时候 xff0c 手机后台还会运行大量的应用非常耗电 这时打开手机 飞行模式 x
  • 使用RESTful 风格+SqlSugar+SqlServer+异步方式创建.NET Core WebApi项目

    所用技术以及框架如下 NET框架 NET Core WebApi RESTful 风格 ORM框架 SqlSugar 测试WebApi接口方式 postman或Swagger 这里使用Swagger 如果需要postman使用教程 后面有时
  • 自行车平衡原理

    转载自 xff1a http nicekwell net blog 20180118 zi xing che ping heng yuan li html 本人是一名16届智能车比赛单车组的备赛学生 xff0c 竞速组选择的是单车拉力组 x
  • 树莓派4B VNC显示不完全,最大化无效问题

    用SSH连接树莓派 xff0c 进入配置界面 选择 interface options xff0c 然后再选 VNC xff0c 选择 yes xff0c 选择 ok xff0c 最后选择 finish 完成操作后就开启了VNC的权限 这时

随机推荐