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

LeetCode 704. 二分查找

LeetCode 704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。

二分查找基础模板(必背)

class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] < target:left = mid + 1elif nums[mid] > target:right = mid - 1else:return midreturn -1

拓展模板(必背)

class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] < target:left = mid + 1else:  # nums[mid] >= targetright = mid - 1return left # 最终,left为该数组中从左到右第一个可以插入target的位置# 也就是说,此时,left 为 nums[i] <= target 的最小值,如果没有left == len(nums)# 说白了,这个算法用于从左到右查询第一个右边元素均小于target的位置,

在这个模板的基础上,可以解决很多问题,如二分查找能在此基础上改写为:

class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums) - 1while left <= right:mid = (left + right) // 2if nums[mid] < target:left = mid + 1else:  # nums[mid] >= targetright = mid - 1return left if left < len(nums) and nums[left] == target else -1

更多分析可见大佬文章

相关文章:

  • attrs:Python的类装饰器(简化类定义)
  • 华为-单臂路由
  • 怎样将多个视频合并成一个?7种无损视频合并技巧,1分钟剪辑出大片!
  • 腾讯邮箱上传附件卡、慢、无法上传,下载慢问题处理
  • Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)
  • Tableau数据可视化入门
  • 一款辅助渗透测试过程,让渗透测试报告一键生成
  • UI设计师面试整理-面向用户的设计
  • 从碎片到整合:EasyCVR平台如何重塑城市感知系统的视频数据生态
  • 一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH
  • Linux系统使用iptables配置入站端口
  • 19 vue3之自定义指令Directive按钮鉴权
  • 在AI时代,程序员如何提升核心竞争力?
  • 本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级
  • Unix-like 系统中的文件所有权管理:使用 sudo chown -R 命令的详解与实践应用
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • “大数据应用场景”之隔壁老王(连载四)
  • 【刷算法】从上往下打印二叉树
  • CODING 缺陷管理功能正式开始公测
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • k8s如何管理Pod
  • learning koa2.x
  • Linux链接文件
  • nfs客户端进程变D,延伸linux的lock
  • Python十分钟制作属于你自己的个性logo
  • 和 || 运算
  • 解析带emoji和链接的聊天系统消息
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 马上搞懂 GeoJSON
  • 浅谈web中前端模板引擎的使用
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 网页视频流m3u8/ts视频下载
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 阿里云ACE认证之理解CDN技术
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2015)JS ES6 必知的十个 特性
  • (C++哈希表01)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (力扣题库)跳跃游戏II(c++)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • @Autowired自动装配
  • @Not - Empty-Null-Blank
  • [\u4e00-\u9fa5] //匹配中文字符
  • [100天算法】-目标和(day 79)
  • [AIGC codze] Kafka 的 rebalance 机制