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

news2024/10/4 21:52:28

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

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

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代码:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广联达-EmailAccountOrgUserService-sql注入漏洞复现

产品简介 广联达OA是一款为企业提供综合办公解决方案的软件。它集成了多种功能&#xff0c;包括文档管理、流程审批、任务分配等&#xff0c;旨在提高企业内部的工作效率和协作能力。同时&#xff0c;广联达OA还注重安全性&#xff0c;通过多种措施保护企业数据和信息的安全。…

Markdown(2篇文章学会Markdown

目录 1.文章链接&#xff1a;2.markdown可以用来解决什么问题&#xff1a;小结&#xff1a; 1.文章链接&#xff1a; Markdown&#xff08;2篇文章学会Markdown第一篇 Markdown&#xff08;2篇文章学会Markdown第二篇 2.markdown可以用来解决什么问题&#xff1a; 格式化文…

C++ 类与对象(上)

目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…

开源之力与GPT的碰撞:探索未来技术的无限可能

摘要&#xff1a; 在本文中&#xff0c;我们将探讨开源软件与GPT&#xff08;大型预训练语言模型&#xff09;的完美结合如何推动技术的飞速发展。我们将简要介绍开源文化的价值观及其对技术创新的影响&#xff0c;分析GPT系列模型在开源社区中的发展与应用&#xff0c;并通过代…

Springboot响应数据详解

功能接口 Controller下每一个暴露在外的方法都是一个功能接口 功能接口的请求路径是RequestMapping定义的路径&#xff0c;浏览器需要请求该功能则需要发出该路径下的请求。 RestController RestControllerControllerResponseBody(响应数据的注解) ResponseBody 类型&#…

使用KMP迁移Android app到IOS平台

使用KMP迁移Android app到IOS平台 如果你有一款Android app&#xff0c;你想将其迁移到IOS平台&#xff0c;但是你不熟悉Swift语言&#xff0c;那么你该如何做呢&#xff1f;辛亏JetBrains 推出 Kotlin Multiplatform 和 Compose Multiplatform &#xff0c;突然间&#xff0c…

FastBee2.0开源版正式启动

一、项目介绍 物美智能(wumei-smart)更名为蜂信物联(FastBee)。 FastBee开源物联网平台&#xff0c;简单易用&#xff0c;更适合中小企业和个人学习使用。适用于智能家居、智慧办公、智慧社区、农业监测、水利监测、工业控制等。 系统后端采用Spring boot&#xff1b;前端采用…

【java】9:多重循环控制(难重点)

介绍&#xff1a; 1)将一个循环放在另一个循环体内&#xff0c;就形成了嵌套循环。其中&#xff0c;for ,while ,do... while均可以作为外层循环和内层循环。 【建议一般使用两层&#xff0c;最多不要超过3层&#xff0c;否则&#xff0c;代码的可读性很差】 2&#xff09;实…

C语言KR圣经笔记 5.12 复杂声明

5.12 复杂声明 C 语言有时会因为声明的语法而受到谴责&#xff0c;特别是涉及函数指针的声明语法。语法试图使声明和使用一致&#xff1b;在简单的情况下它的效果不错&#xff0c;但在更复杂的情况下会让人困惑&#xff0c;因为声明不能从左往右读&#xff0c;而且括号被过度使…

C/C++编码问题研究

文章目录 一、Unicode字符集与U8/U16/U32编码二、编码1. 占字节数2. ASCII、GB2312、GBK、GB18030 以及 UTF8 的关系3. BOM4. UTF-8的存储实现 三、编译器字符集设置1. GCC语法Example 2. MSVC语法Example 三、wchar_t五、编码转换函数六、代码 & 实践1. UTF8与UTF16、UTF3…

深度学习使用python建立最简单的神经元neuron

目录 介绍 数据&#xff1a; 建模&#xff1a; 模型&#xff1a; 介绍 在深度学习中&#xff0c;神经元通常指的是人工神经元&#xff08;或感知器&#xff09;&#xff0c;它是深度神经网络中的基本单元。深度学习的神经元模拟了生物神经元的工作原理&#xff0c;但在…

单链表实现通讯录(增删查改)

前言 之前写了很多次通讯录&#xff0c;一次比一次复杂&#xff0c;从静态到动态&#xff0c;再到文件操作&#xff0c;再到顺序表&#xff0c;今天要好好复习一下单链表&#xff0c;于是乎干脆用单链表再写一遍。 首先我们之前已经用单链表写过他的增删查改了&#xff0c;于…

IS-IS:04 DIS

IS-IS 协议只支持两种网络类型&#xff0c;即广播网络和点到点网络。与 OSPF 协议相同&#xff0c; IS-IS 协议在广播网络中会将网络视为一个伪节点 &#xff08; Pesudonde&#xff0c;简称 PSN&#xff09;&#xff0c;并选举出一台DIS &#xff08;Designated IS&#xff09…

【学习】傅里叶变换分析与理解

傅里叶级数的本质是将一个周期的信号分解成无限多分开的&#xff08;离散的&#xff09;正弦波&#xff0c;但是宇宙似乎并不是周期的。 理解频域、空域&#xff08;时域&#xff09; 时域&#xff08;空域&#xff09;是从时间方向看过去的得到的图像&#xff0c;而频域是从频…

laravel框架项目对接小程序实战经验回顾

一.对接小程序总结 1.状态转换带来的问题&#xff0c;如下 问题原因&#xff1a;由于status 传参赋值层级较多&#xff0c;导致后续查询是数组但是传参是字符串&#xff0c; 解决方案&#xff1a;互斥的地方赋值为空数组&#xff0c;有状态冲突的地方unset掉不需要的参数 2参…

4核16G幻兽帕鲁服务器优惠价格表,阿里云和腾讯云报价

幻兽帕鲁服务器价格多少钱&#xff1f;4核16G服务器Palworld官方推荐配置&#xff0c;阿里云4核16G服务器32元1个月、96元3个月&#xff0c;腾讯云幻兽帕鲁服务器服务器4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64…

双非本科准备秋招(9.2)——力扣哈希

1、383. 赎金信 跟昨天的题大同小异&#xff0c;因为只有26个字母&#xff0c;所以可以建个有26个坑位的数组。 做完昨天的题目&#xff0c;这个题没啥新意。 class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] hashTable new int[…

shell脚本5 函数 数组

函数 试题1 查看版本 如果想更方便&#xff0c;可以建立一个专门存函数的文件 将func.sh里面的命令都移到func文件夹里面&#xff0c;在脚本里面执行文件夹更方便 输入echo $?反馈的结果都是0&#xff0c;都认为是正确的 无法使用$?去检验是否正确&#xff0c;所以要在后面增…

python 基础知识点(蓝桥杯python科目个人复习计划27)

今日复习内容&#xff1a;基础算法中的递归 1.介绍 递归&#xff1a;通过自我调用来解决问题的函数递归通常把一个复杂的大问题层层转化为一个与原问题相似的规模较小的问题来解决 递归要注意&#xff1a;&#xff08;1&#xff09;递归出口&#xff1b;&#xff08;2&#x…

使用 Redis 的 List 数据结构实现分页查询的思路

假设有一个存储数据的 List&#xff0c;每个元素代表一个记录&#xff0c;例如 recordsList。 按页存储数据&#xff1a; 每页存储一定数量的记录。例如&#xff0c;第一页存储索引 0 到 N-1 的记录&#xff0c;第二页存储索引 N 到 2N-1 的记录&#xff0c;以此类推。 分页查…