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

【二分查找】——模板

二分查找模板题

一、题目要求

给定一个长度为n非递减数组和一个数字target,要求找到数组中第一个大于等于target的位置pos,数组下标从 0 开始。如果不存在大于等于target的数字,则输出 -1。

二、输入格式

  1. 第一行:为两个正整数ntarget,其中1≤n,target≤10^5。分别表示数组长度和要查询的数字。
  2. 第二行:为n个正整数a1,a2,...,an,其中1≤ai≤10^5,表示给定的非递减数组。

三、输出格式

输出数组中第一个大于等于target的位置pos,如果不存在,则输出 -1。

四、示例

  1. 输入
    • 7 5
    • 2 3 5 6 7 8 9
  2. 输出
    • 2

暴力解法

一个一个试

二分查找

二分查找代码思路的通俗解释:

一、整体目标

我们的目标是在一个非递减(升序)的整数数组中找到第一个大于等于给定目标值target的元素的位置。如果不存在这样的元素,则返回 -1。

二、初始化

  1. 首先,我们有一个整数数组nums,它的长度为n。我们设置两个指针,left指向数组的第一个元素的位置,初始值为 0;right指向数组的最后一个元素的位置,初始值为n - 1
    • 这就好比我们在一个有很多房间的长廊里找东西,一开始left站在第一个房间门口,right站在最后一个房间门口,确定了我们的搜索范围是整个长廊。

三、循环查找

  1. 进入一个循环,只要left小于right,就一直循环下去。
    • 这个循环就像是我们在不断缩小搜索范围,直到找到目标或者确定目标不存在。
  2. 在循环中,计算中间位置mid,计算公式是mid = left + (right - left) // 2
    • 这就相当于我们每次都把长廊分成两部分,然后去中间的那个房间看看。
  3. 如果中间位置的元素nums[mid]小于目标值target,说明目标值如果存在的话,一定在mid的右边。所以我们把left更新为mid + 1,这样就缩小了搜索范围到右边的部分。
    • 就像我们确定目标不在左边这一半长廊了,于是left走到了原来中间那个房间的右边一个房间,继续搜索右边的长廊。
  4. 如果中间位置的元素nums[mid]大于等于目标值target,说明目标值如果存在的话,一定在mid的左边或者就是mid本身。所以我们把right更新为mid,这样就缩小了搜索范围到左边的部分。
    • 这时候我们觉得目标可能在左边这一半长廊,于是right走到了原来中间那个房间,继续搜索左边的长廊。

四、确定结果

  1. 当循环结束时,也就是leftright相等或者left大于right了。这时候我们检查left位置的元素是否大于等于目标值。
    • 如果是,说明我们找到了第一个大于等于目标值的位置,就是left
    • 如果不是,说明数组中不存在大于等于目标值的元素,就返回 -1。
n, target = map(int, input().split())
nums = list(map(int, input().split()))left, right = 0, n - 1
while left < right:mid = left + (right - left) // 2if nums[mid] < target:left = mid + 1else:right = mid
if nums[left] >= target:print(left)
else:print(-1)

二分查找适用于以下几种情况:

  1. 有序数据查找元素:数据是有序排列的,要查找特定元素,能高效定位,时间复杂度为 O ( l o g n ) O(log n) O(logn),比线性查找的 O ( n ) O(n) O(n)快很多。
  2. 查找边界值:在单调变化(递增或递减)的数据中,找满足某个条件的边界值,比如满足某个不等式的最小或最大数值。
  3. 动态规划优化:在动态规划问题里,用于优化状态转移过程,快速查找满足条件的区间内元素。
  4. 广范围数据搜索:数据分布范围广,二分查找可以缩小搜索区间,快速定位目标或目标区间,避免大量无效搜索。

相关文章:

【二分查找】——模板

二分查找模板题 一、题目要求 给定一个长度为n的非递减数组和一个数字target&#xff0c;要求找到数组中第一个大于等于target的位置pos&#xff0c;数组下标从 0 开始。如果不存在大于等于target的数字&#xff0c;则输出 -1。 二、输入格式 第一行&#xff1a;为两个正整…...

从可逆计算看DSL的设计要点

低代码平台的可视化设计器本质上是DSL&#xff08;Domain Specific Language&#xff09;的结构化编辑器。可视化设计器将编辑的结果序列化成文本格式时所采用的规范就是一种DSL语法定义。 Nop平台基于可逆计算原理&#xff0c;提出了一整套系统化的构建机制来简化DSL的设计和…...

axios竟态问题

竟态问题 在我们日常开发经常遇到一些竟态问题 例子1 现象1 表格分页&#xff0c;如果设置请求loading, 先切换到分页第99页&#xff0c;迅速在又切换到第1页&#xff0c;最后列表显示的是第99页数据。 原因 由于第99页请求数据花费时间可能500ms,第1页数据只需要100ms,第1页…...

如何批量注册多个Outlook邮箱账号并避免关联

批量注册多个Outlook邮箱账号时&#xff0c;如何避免账号之间的关联性是一个重要的考量因素。会在此文一起探讨如何高效且安全地批量注册多个Outlook邮箱账号&#xff0c;并提供一些实用的建议来确保这些账号不会被关联。 一、Outlook邮箱批量注册机制 在深入注册流程之前&…...

如何在安卓設備上設置全局代理?

對於安卓用戶來說&#xff0c;設置全局代理是維護網路隱私一種有效的方法&#xff0c;可以幫助在所有應用中使用同一個代理伺服器。本文將詳細介紹如何在安卓設備上進行全局代理設置。全局代理指的是通過一個代理伺服器來轉發設備上所有應用程式的網路請求。這樣&#xff0c;所…...

操作系统实验记录

实验零:虚拟机安装 一、安装vmware虚拟机 与vmware匹配搜索结果 - 考拉软件 (rjctx.com),下载17.5.1版本即可下载后对照教程安装 二、下载iso虚拟驱动 搜索清华大学镜像网站,点击再搜ubuntu,下载这个4.1GB的iso文件安装后打开vmware虚拟机 三、配置vmware虚拟机 右键管…...

FastAPI 路径参数详解:动态路径与数据校验的灵活实现

FastAPI 路径参数详解&#xff1a;动态路径与数据校验的灵活实现 本文全面介绍了在 FastAPI 中使用路径参数的技巧和实现方式。路径参数允许 API 动态响应不同路径中的请求信息&#xff0c;结合 URL&#xff08;Uniform Resource Locator&#xff09;和 URI&#xff08;Unifor…...

【STM32】SD卡

(一)常用卡的认识 在学习这个内容之前&#xff0c;作为生活小白的我对于SD卡、TF卡、SIM卡毫无了解&#xff0c;晕头转向。 SD卡&#xff1a;Secure Digital Card的英文缩写&#xff0c;直译就是“安全数字卡”。一般用于大一些的电子设备比如&#xff1a;电脑、数码相机、AV…...

我一口气记录下整个接口自动化测试过程!

一、为什么选用postman postman调试工具无论对于开发和测试小白&#xff0c;还是技术大牛来说应该都耳熟能详&#xff0c;在过去的几年里大家对这款工具应用最广的用途是把当作接口调试的测试工具&#xff0c;它能发送几乎所有类型的HTTP请求&#xff0c;操作界面非常简洁美观…...

【VS中Git同步提交 报错:访问.vs/FileContentIndex/xxx.vsidx权限不允许】

参考&#xff1a; Git commit vsidx file access denied in Visual Studio 一劳永逸的方法&#xff1a; 在VSCode里&#xff0c;Git->设置->选项&#xff1a;编辑.gitignore文件&#xff0c;如下图&#xff1a; 忽略整个.vs文件夹&#xff0c;再重新提交就不会有涉及…...

Linux下Nginx的安装与使用

Linux下Nginx的安装与使用 博客&#xff1a; www.lstar.icu 开源地址 Gitee 地址&#xff1a; https://gitee.com/lxwise/iris-blog_parent Github 地址&#xff1a; https://github.com/lxwise/iris-blog_parent 序言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…...

飞机布雷盖航程公式

飞机布雷盖航程公式 1. 喷气式飞机布雷盖航程公式推导2. 螺旋桨飞机布雷盖航程公式推导3. 喷气式飞机与螺旋桨飞机的差异分析3.1 喷气式飞机的推力产生机制3.2 螺旋桨推进推力产生机制 布雷盖航程公式&#xff08;Breguet Range Equation&#xff09;是描述飞行器巡航飞行阶段航…...

在K8s平台部署个人博客

在K8s平台部署个人博客 实验步骤查看wordpress前端的service浏览器访问http://node_ip:30090 实验步骤 kubectl create secret generic mysql-pass --from-literalpasswordYOUR_PASSWORD把mysql.tar.gz和wordpress.tar.gz上传到K8s工作节点&#xff0c;手动解压即可&#xff1…...

git入门教程10:git性能优化

一、配置优化 使用SSH协议&#xff1a; 相比HTTP/HTTPS协议&#xff0c;SSH协议在网络传输中更高效&#xff0c;且支持更安全的认证方式。确保你的远程仓库URL使用的是SSH协议&#xff0c;例如&#xff1a;git clone gitgithub.com:username/repo.git。 调整Git缓冲区大小&…...

Redis(2):内存模型

一、Redis内存统计 工欲善其事必先利其器&#xff0c;在说明Redis内存之前首先说明如何统计Redis使用内存的情况。 在客户端通过redis-cli连接服务器后&#xff08;后面如无特殊说明&#xff0c;客户端一律使用redis-cli&#xff09;&#xff0c;通过info命令可以查看内存使用情…...

深入解析Diffusion和AsymmDiT:Mochi 1的高效AI视频生成之路

随着AI视频生成技术的迅猛发展&#xff0c;各种模型纷纷涌现&#xff0c;各自展现出独特的优势。近期&#xff0c;Genmo 推出了新一代视频生成模型——Mochi 1&#xff0c;以其非对称架构设计和高效生成流程在业界备受瞩目。作为开源模型&#xff0c;Mochi 1不仅在视觉生成质量…...

VMware capacity mismatch for disk错误解决办法:kb-vuln-1靶机

https://www.vulnhub.com/entry/kb-vuln-1,540/ 本机安装有: VMware Workstation 16 Pro 16.2.1 build-18811642VirtualBox 图形用户界面 版本 5.2.30 r130521 (Qt5.6.2) vm16.2支持wsl2,所以我得让vm16.2跑靶机,VirtualBox5.2可以导入靶机,但是无法开机(不支持wsl2),得升级 …...

Java Collection/Executor LinkedTransferQueue 总结

前言 相关系列 《Java & Collection & 目录》《Java & Executor & 目录》《Java & Collection/Executor & LinkedTransferQueue & 源码》《Java & Collection/Executor & LinkedTransferQueue & 总结》《Java & Collection/Execu…...

阿拉伯国家本地化测试的特点

针对阿拉伯国家的应用程序的本地化测试需要详细了解语言、文化背景、地区规范和技术细节&#xff0c;以符合阿拉伯语用户的期望。这些国家包括沙特阿拉伯、阿拉伯联合酋长国、科威特、卡塔尔、巴林和阿曼&#xff0c;具有独特的语言和文化因素&#xff0c;成功地本地化测试解决…...

申请前必知!关于「美国绿卡」的28个常见问题汇总!

01 美国绿卡的类别 美国绿卡分为多个类别&#xff0c;如亲属移民、职业移民、投资移民等。每个类别有不同的申请要求和优先级。选择最适合自己的类别&#xff0c;并深入了解相关法律和政策&#xff0c;是成功申请的第一步。 02 移民路径选择 根据个人情况&#xff08;如职业…...

别再说国产模型不行了!DeepSeek V4 + Claude Code,编程体验直接起飞

别再说国产模型不行了&#xff01;DeepSeek V4 Claude Code&#xff0c;编程体验直接起飞 还在觉得 DeepSeek V4 不如国外模型&#xff1f; 醒醒&#xff0c;2026 年了。DeepSeek V4 系列在代码能力上已经卷到让人窒息——而且价格只有 Claude 官方的零头。 但问题来了&…...

MifareOneTool完全指南:零基础掌握Windows最强NFC卡片管理工具

MifareOneTool完全指南&#xff1a;零基础掌握Windows最强NFC卡片管理工具 【免费下载链接】MifareOneTool A GUI Mifare Classic tool on Windows&#xff08;停工/最新版v1.7.0&#xff09; 项目地址: https://gitcode.com/gh_mirrors/mi/MifareOneTool 你是否曾经面对…...

手把手教你用示波器抓取Intel CPU的SVID时序(附读写判定与Intel送测指南)

实战指南&#xff1a;利用示波器精准解析Intel CPU的SVID通信时序 当一块新设计的服务器主板首次上电时&#xff0c;电源管理系统的稳定性往往决定了整个平台的可靠性。作为硬件工程师&#xff0c;我们常常需要直面这样的场景&#xff1a;主板虽然能点亮&#xff0c;但CPU与电压…...

告别VirtualBox的‘不是Host-Only适配器’错误:一个网络配置的深度修复指南

VirtualBox Host-Only网络故障全解析&#xff1a;从原理到实战修复 当你正准备启动VirtualBox中的开发环境虚拟机时&#xff0c;突然弹出的红色错误提示框让所有工作戛然而止——"Interface is not a Host-Only Adapter"。这个看似简单的网络适配器错误背后&#xf…...

麒麟系统离线部署OnlyOffice,我踩过的那些坑(附Docker镜像包和完整配置)

麒麟系统离线部署OnlyOffice实战避坑指南 在国产化替代浪潮中&#xff0c;麒麟系统作为主流国产操作系统&#xff0c;正逐步应用于各类关键信息基础设施领域。而办公软件作为日常刚需&#xff0c;如何在麒麟系统上实现高效、安全的文档协作成为许多技术团队面临的挑战。OnlyOff…...

宏裕塑胶代理新日铁住金日本工程塑料全系列产品服务详解

宏裕塑胶代理新日铁住金系列产品专注于为制造业企业提供高性价比、稳定可靠的通用工程塑料原料&#xff0c;依托源头直采及技术赋能&#xff0c;为塑胶制品厂、汽车零部件厂等客户降低采购成本并保障全流程供应。宏裕塑胶代理新日铁住金核心功能与服务模块覆盖多个维度&#xf…...

告别卡顿!用ZLMRTCClient.js和Vue3打造超低延迟WebRTC监控播放器(附完整代码)

超低延迟WebRTC监控播放器&#xff1a;基于ZLMRTCClient.js与Vue3的工程实践 在安防监控、智慧园区等对实时性要求极高的场景中&#xff0c;传统流媒体方案如HLS或FLV往往面临3-5秒甚至更高的延迟。这种延迟在关键场景下可能导致严重后果——当监控画面显示"一切正常"…...

Cadence Allegro焊盘设计避坑指南:从SMD到通孔,这些层设置错了板子就废了

Cadence Allegro焊盘设计避坑指南&#xff1a;从SMD到通孔的关键层设置解析 当一块PCB板从设计文件变成实体电路板时&#xff0c;最令人崩溃的莫过于发现焊盘设计不当导致整批产品无法使用。作为使用Cadence Allegro进行PCB设计的工程师&#xff0c;Padstack Editor中的每个参数…...

利用Taotoken模型广场为不同任务选择合适大模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用Taotoken模型广场为不同任务选择合适大模型 在实际开发工作中&#xff0c;我们常常面临多种任务需求&#xff1a;有时需要模型…...

从门电路到芯片:拆解一个D触发器,看数字电路如何实现‘记忆’这个核心功能

从门电路到芯片&#xff1a;拆解一个D触发器&#xff0c;看数字电路如何实现‘记忆’这个核心功能 数字世界的每一个比特信息都需要被精确存储和传递&#xff0c;而实现这一功能的核心元件便是触发器。当我们按下电脑的电源键&#xff0c;屏幕上闪现的第一个像素到硬盘中保存的…...