备战蓝桥杯---二分(基础)

何为二分?形象的说,就是单调函数求零点。

我们先对二分查找简单的分析一下(主要是模板及易错点)

1.找>=x的第一个位置:                 2.找<=x的第一个位置:                                         

while(l<r){                                         while(l<r){

mid=(l+r)/2;                                        mid=(l+r)/2;

if(a[mid]>=x) r=mid;                            if(a[mid]<=x) l=mid;

else l=mid+1;                                      else r=mid-1;}

}

首先,对于代码1,当mid的值大于等于x时,说明mid后面都不是目标值但自己不确定。

而当mid的值小于x时,说明mid自己及其前面都不是目标值。

所以l到r的区间即为目标值存在的区间,所以只要保证两者稳定的逼近一个点即可。

当区间不断变小时,对于代码2,因为mid的向左取整,而l又直接赋值为mid,于是可能会进入死循环。而1的话l再mid基础上加了1,保证它至少会走1步,避免了死循环。

所以代码2只需mid=(l+r+1)/2即可。或者把循环条件改为l<=r,l=mid+1;这样就能保证不会陷入死循环,不过这样答案在l-1上。

因此,法1可以改成:l<=r,r=mid-1;

这样子,r及其后面一个都可能为答案,而终止时l==r+1;因此l所在的地方即为答案。

特别的当r不动时,l一定与R会相等,如果此时r还是不动,说明无法找到,l也指向右边界+1;

注意一点细节:

有时+r可能会超int ,我们可以用l+(r-l)/2来代替。

C++ STL的二分查找函数:

binary_search:返回bool是否存在

lower_bound:返回第一个符合条件的位置 1 2 3 5 6 7,搜4时指向5

upper_bound:返回最后一个符合条件的位置 1 2 2 3 3 5,插3时指向5

下面来一道水题:

我们用前缀和维护并分别用二分即可,下面是AC代码:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Javaweb】【C00157】基于SSM的宠物护理预定系统(论文+PPT)

基于SSM的宠物护理预定系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物护理预订系统 本系统分为前台系统模块、后台管理员模块以及后台会员用户模块 其中前台系统模块&#xff1a;当游客打开系统的网址后&…

apt-get install时遇错误404

目录 1 问题 2 解决 3 编译源码时其他安装命令 1 问题 执行 sudo apt-get install libglib2.0-dev 或者其他安装命令时出现如下类似错误 http://security.debian.org/debian-security stretch/updates/main amd64 poppler-utils amd64 0.48.0-2deb9u4 404 Not Found [IP: …

四步搞定国赛!快速入门大小模型融合的AI产品开发

前不久&#xff0c;2024中国大学生服务外包创新创业大赛正式启动&#xff01;作为中国高等教育学会“全国普通高校学科竞赛排行榜”竞赛&#xff0c;飞桨赛道已经吸引了超过200位选手报名参赛。 本文旨在助力“A01-基于文心大模型智能阅卷平台设计”赛道选手&#xff0c;更快地…

【备战蓝桥杯】——循环结构

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-bFHV3Dz5xMe6d3NB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

SpringBoot整合EasyCaptcha图形验证码

简介 EasyCaptcha&#xff1a;https://github.com/ele-admin/EasyCaptcha Java图形验证码&#xff0c;支持gif、中文、算术等类型&#xff0c;可用于Java Web、JavaSE等项目。 添加依赖 <dependency><groupId>com.github.whvcse</groupId><artifactId…

Arm AArch64 alignment(对齐)

数据和指令必须与合适的边界保持对齐(alignment)。访问是否对齐会影响ARM核的性能&#xff0c;并且在将代码从早期的体系结构移植到ARMv8-A时可能会出现可移植性问题。出于性能原因&#xff0c;或者在移植代码时&#xff0c;都值得去注意下对齐问题。本文将讲述了ARMv8-A AArch…

【AJAX】简单学习记录

文章目录 一、Ajax是什么&#xff1f;二、AJAX工作原理&#xff1a;三、如何实现ajax请求四、同步交互与异步交互总结发送请求有哪些方式/标签&#xff1a;Ajax实现方式&#xff1a; 一、Ajax是什么&#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 Java…

【竞技宝】LOL:Burdol剑魔打如入无人之境 LGD让一追二击败UP

北京时间2024年1月28日&#xff0c;英雄联盟LPL2024春季赛在昨天迎来第一周第六个比赛日&#xff0c;本日第二场比赛由LGD对阵UP。本场比赛双方前两局互相翻盘各取一胜&#xff0c;决胜局Burdol的剑魔后期团战能扛能打如入无人之境&#xff0c;最终LGD让一追二击败UP。以下是本…

docker 部署xxl-job

docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…

算法设计与分析实验:堆排序与分治

目录 一、合并K个升序链表 1.1 采用堆排序的思路 1.2 采用优先队列的思路 1.3 采用分治的思路及具体测试 二、数据流中的中位数 ​编辑2.1 具体思路 2.2 代码实现 2.3 测试结果 三、数组中的第k个最大元素 3.1 采用分治思路 3.2 采用最小堆 四、 最小K个数 4.1 采用…

MySQL知识点总结(二)——explain执行计划、SQL优化

MySQL知识点总结&#xff08;二&#xff09;——explain执行计划、SQL优化 explain执行计划typepossible_keyskeysextra SQL优化SQL优化的流程SQL优化技巧范围查询优化排序优化分组查询优化distinct优化分页查询优化join关联查询优化排序分页 关联查询分组 关联查询 排序in与…

基于FFT + CNN - BiGRU-Attention 时域、频域特征注意力融合的电能质量扰动识别模型

目录 往期精彩内容&#xff1a; 引言 1 快速傅里叶变换FFT原理介绍 第一步&#xff0c;导入部分数据&#xff0c;扰动信号可视化 第二步&#xff0c;扰动信号经过FFT可视化 2 电能质量扰动数据的预处理 2.1 导入数据 第一步&#xff0c;按照公式模型生成单一信号 2.2 …

【Android Gradle 插件】Gradle 基础配置 ② ( Gradle 空白项目构建示例演示 )

一、Gradle 空白项目构建示例演示 在任意一个空白目录 , 创建 build.gradle 构建脚本 , 该脚本是 Gradle 构建的入口 ; 在顶级目录和每个子工程 , 都要有单独的 build.gradle 构建脚本 ; 在 上述 build.gradle 构建脚本中添加如下代码 : println "Hello Gradle !"…

【IM】如何保证消息可用性(一)

目录 1. 基本概念1.1 长连接 和 短连接1.2 PUSH模式和PULL模式 2. 背景介绍2.1 理解端到端的思想 3. 方案选型3.1 技术挑战3.2 技术目标 1. 基本概念 在讲解消息可用性之前&#xff0c;需要理解几个通信领域的基本概念。 1.1 长连接 和 短连接 什么是长连接&#xff0c;短连接…

《幻兽帕鲁》火遍全球,上百个游戏角色竟被曝是AI生成的?

原创 | 文 BFT机器人 最近&#xff0c;一款名为《幻兽帕鲁》&#xff08;Palworld&#xff09;的开放世界生存游戏在社交网络平台上引发了热议&#xff0c;成为了当下最受关注的游戏之一。 这款游戏在1月19日于Steam平台上线抢先体验版本&#xff0c;仅仅24小时之内&#xff0…

2024.1.29每日一题

LeetCode 自由之路 自由之路通向自由&#xff0c;通向睡觉吧&#x1f604; 514. 自由之路 - 力扣&#xff08;LeetCode&#xff09; 题目描述 电子游戏“辐射4”中&#xff0c;任务 “通向自由” 要求玩家到达名为 “Freedom Trail Ring” 的金属表盘&#xff0c;并使用表盘…

K8s 安装部署-Master和Minion(Node)

K8s 安装部署-Master和Minion(Node) 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETCD y…

[论文阅读] |RAG评估_Retrieval-Augmented Generation Benchmark

写在前面 检索增强能够有效缓解大模型存在幻觉和知识时效性不足的问题&#xff0c;RAG通常包括文本切分、向量化入库、检索召回和答案生成等基本步骤。近期组里正在探索如何对RAG完整链路进行评估&#xff0c;辅助阶段性优化工作。上周先对评估综述进行了初步的扫描&#xff0…

Python 使用重构重命名一键更改变量名的方法

一个变量有多处引用的情况下&#xff0c;需要重命名&#xff0c;可以使用重构重命名进行一键更改。 方法是:选择变量名–>右键–>Refactor–>Rename&#xff08;也可以使用快捷&#xff1a;选择变量后按下ShiftF6&#xff09;&#xff0c;然后直接输入新的变量名即可…