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

力扣刷题(第六十四天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

第一个错误的版本

解题思路

  1. 初始化左右边界:左边界 left = 1,右边界 right = n
  2. 二分查找循环
    • 计算中间版本号 mid
    • 若 mid 是错误版本,说明第一个错误版本在 [left, mid] 中,更新右边界。
    • 若 mid 不是错误版本,说明第一个错误版本在 [mid+1, right] 中,更新左边界。
  3. 终止条件:当 left 和 right 相遇时,即为第一个错误版本。
    # 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, right = 1, nwhile left < right:mid = left + (right - left) // 2  # 防止整数溢出if isBadVersion(mid):# 第一个错误版本在[left, mid]中right = midelse:# 第一个错误版本在[mid+1, right]中left = mid + 1# 循环结束时,left和right指向同一个位置return left

逐行解释

# 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 = 1# 初始化右边界为最后一个版本right = n# 循环条件:左边界严格小于右边界# 当left == right时,循环结束,此时的left即为第一个错误版本while left < right:# 计算中间版本号,使用(left + right) // 2可能导致整数溢出# 例如当left和right都接近INT_MAX时,加法会溢出mid = left + (right - left) // 2# 检查中间版本是否为错误版本if isBadVersion(mid):# 如果中间版本是错误的,第一个错误版本可能是mid或在mid左侧# 因此更新右边界为mid(注意:没有减1,因为mid可能就是答案)right = midelse:# 如果中间版本不是错误的,第一个错误版本必然在mid右侧# 因此更新左边界为mid + 1left = mid + 1# 循环结束时,left和right指向同一个位置,即第一个错误版本return left

http://www.dtcms.com/a/256270.html

相关文章:

  • 解决mysql左连接加where就不会保留左表中的全部数据的问题
  • 【转】如何画好架构图:架构思维的三大底层逻辑
  • 冰箱压缩机电机驱动板【IPM部分】
  • ffmpeg(六):图片与视频互转命令
  • 抖音的视频怎么下载下来——下载狗解析工具
  • QC -io 服务器排查报错方式/报错: Failed to convert string to integer of varId variable!“
  • Nginx反向代理解决跨域问题详解
  • 进程间通信、线程间通信
  • 基于Qt的UDP主从服务器设计与实现
  • 集群聊天项目服务器----JSON库
  • C语言:排序算法
  • 作为测试人员,平时用什么大模型?怎么用?
  • PHP语法基础篇(五):流程控制
  • 如何匹配晶振的负载电容
  • 【SystemVerilog 2023 Std】第6章 数据类型 Data types (1)
  • C# 网络编程-关于请求头(Request Headers)和 响应头(Response Headers)作用(五)
  • SiteAzure:解决数据库服务器内存频繁吃满
  • 【Linux 平台总线驱动开发实战】
  • 三种语言写 MCP
  • 大数据量的分页,怎么办?
  • MagnTek MT6816-ACD 一款基于各向异性磁阻(AMR)技术的磁性角度传感器 IC
  • 现代浏览器剪贴板操作指南 + 示例页面 navigator.clipboard 详解与实战
  • 1.20.1 服务器系统(windows,Rocky 和 Ubuntu )体验
  • 浅议 3D 展示技术为线上车展新体验带来的助力​
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 基于Spring Boot瀚森健身房会员管理系统设计与实现【源码+文档】
  • React JSX语法
  • 基于YOLO的智能车辆检测与记录系统
  • Vue.js 粒子连线动画组件 - FlyingLines
  • 【RAG优化】深度解析开源项目MinerU:从PDF解析到多模态理解的工业级解决方案