二分查找(函数法)

1.二分查找的前提

  • 只有单调的序列才能进行二分查找;

  • 一般为单调不减,单调不增需要像 sort() 一样修改比较函数;

2.binary_search( ) 函数

  • binary_search( ) 是算法库(algorithm)函数里面的,用于在一个已经排好序的序列(数组或者容器)中查找目标值target;

  • 底层实现为进行二分查找,函数返回一个 bool 值来表示目标值 target 是否存在于此序列中

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> a = {1,2,4,7,8,9,12};
    int target = 8;
    bool retult = binary_search(a.begin(),a.end(),target);	//前两个参数为查找范围始终点,第三个参数为target;
    if(retult)	cout << "yes";
    else	cout << "no";
    return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a[10] = {1,2,4,7,8,9,12};
    int target = 8;
    bool retult = binary_search(a,a+7,target);	//迭代器可以,数组地址也可以
    if(retult)	cout << "yes";
    else	cout << "no";
    return 0;
}

3.lower_bound( ) 和 upper_bound( )函数

1)lower_bound( )

  • 是在非降序序列中寻找 target 值的所在地址;

  • lower_bound(a,b,target)会返回此序列 [a,b) 中第一个大于等于 target 值的地址

  • 想获得其下标需要使用其返回值减去a的地址,即 a.begin() 或者 a ;

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a[10] = {1,3,2,11,8,9,10};
    int target = 8;
    sort(a,a+7);
    cout << "target第一次出现在:" << lower_bound(a,a+7,target)-a;
    return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> a = {1,3,2,11,8,9,10};
    int target = 8;
    sort(a.begin(),a.end());
    cout << "target第一次出现在:" << lower_bound(a.begin(),a.end(),target)-a.begin();
    return 0;
}

2)upper_bound( )

  • 与 lower_bound( ) 相同,都是在非降序序列;

  • upper_bound(a,b,target) 返回此序列 [a,b) 中第一个大于 target 值的地址

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector<int> a = {1,3,2,11,8,8,8,8,8,9,10};
    int target = 8;
    sort(a.begin(),a.end());
    cout << upper_bound(a.begin(),a.end(),target)-a.begin();
    return 0;
}

3)总结

  • 当一个序列中存在多个 target 值时,lower_bound( ) 所得到的是序列中第一个 target 值所在的下标a,upper_bound( ) 所得到的是序列中第一个大于 target 值所在的下标b,故此此序列下标 [a,b) 的所有数据均为 target ;

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

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

相关文章

【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】

山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求&#xff1a; 配备至少8GB VRAM的GPU&#xff0c;如果你的电脑只有CPU&#xff0c;请看到最后。根据部署规模&#xff0c;需要足够的CPU和RAM。 软件要求&#xff1a; Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

Training - PyTorch Lightning 分布式训练的 global_step 参数 (accumulate_grad_batches)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137640653 在 PyTorch Lightning 中&#xff0c;pl.Trainer 的 accumulate_grad_batches 参数允许在执行反向传播和优化器步骤之前&…

CSS常用十大选择器(理论+代码实操)

HTML代码实例 注意&#xff1a;拷贝后本地运行注意head标签中的link标签的href属性是否正确 我的目录结构&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Title</title><lin…

人机区别之一在于机器智能还不能提出问题

人机区别在于机器智能目前还不能提出问题。虽然机器智能已经可以通过程序和算法执行各种任务&#xff0c;但它们仍然无法像人类一样主动思考和提出问题。机器智能只能根据预设的指令或对特定情况的响应来进行操作&#xff0c;而无法产生自己的独立思考和主动提问。这是因为机器…

广东省道路货物运输资格证照片回执可手机线上办理

广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件&#xff0c;而在办理该证件的过程中&#xff0c;驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及&#xff0c;现在办理驾驶员照片回执已经不再需要亲自前往照相馆&#xff0c;而…

结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制React three.js 实现人脸动捕与3D模型表情同步结合 react-webcam、three.js 与 electron 实现桌面人脸动捕应用 示例项目(github)&…

MES生产管理系统:私有云、公有云与本地化部署的比较分析

随着信息技术的迅猛发展&#xff0c;云计算作为一种新兴的技术服务模式&#xff0c;已经深入渗透到企业的日常运营中。在众多部署方式中&#xff0c;私有云、公有云和本地化部署是三种最为常见的选择。它们各自具有独特的特点和适用场景&#xff0c;并在不同程度上影响着企业的…

neo4j使用详解(结尾、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

Tesserocr 的安装步骤

Tesserocr 的安装 OCR&#xff0c;即 Optical Character Recognition&#xff0c;光学字符识别。是指通过扫描字符&#xff0c;然后通过其形状将其翻译成电子文本的过程。那么对于图形验证码来说&#xff0c;它都是一些不规则的字符&#xff0c;但是这些字符确实是由字符稍加扭…

精确运算为什么不能用double?

主要原因:就是因为double会导致数据不准确&#xff0c;不准确的原因如下所示 高于大小的比特会被自动删除&#xff0c;但是在删除的过程中还需要遵循 IEEE-754 规范&#xff0c;这就是我们理解的删除不应该会让数变小吗&#xff1f;为什么计算机的计算会变大? 如果最后一位是1…

Ubuntu20.04安装FloodLight最新版本

Ubuntu20.04安装FloodLight最新版本 网上的很多教程尝试了一下都不对&#xff0c;并且很多都是基于Ubuntu14的旧版本系统&#xff0c;其中的Python环境大多是基于2.0的&#xff0c;由于本人所使用的系统是Ubuntu20.04&#xff0c;后再油管澳大利亚某个学校的网络教学视频的帮助…

2024年大唐杯备考

努力更新中…… 第一章 网络架构和组网部署 1.1 5G的网络整体架构 5G网络中的中传、回传、前传&#xff08;这里属于承载网的概念&#xff09; CU和DU之间是中传 BBU和5GC之间是回传 BBU和AAU之间是前传&#xff08;这个好记&#xff09; 这里竟然还藏了MEC&#xff08;…

【Linux】centos 7 vim默认一个tab键相当于8个空格 -> 修改成4个空格

专栏文章索引&#xff1a;Linux 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、项目场景 二、问题描述 三、原因分析 四、解决方案 1.仅本次 2.永久 一、项目场景 使用vim编辑器编写python3代码 二、问题描述 在使用vim编辑器时&#xff0c;想要缩进&am…

LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑

背景介绍 大模型ReAct&#xff08;Reasoning and Acting&#xff09;是一种新兴的技术框架&#xff0c;旨在通过逻辑推理和行动序列的构建&#xff0c;使大型语言模型&#xff08;LLM&#xff09;能够达成特定的目标。这一框架的核心思想是赋予机器模型类似人类的推理和行动能…

Qt快速入门(Opencv小案例之人脸识别)

Qt快速入门&#xff08;Opencv小案例之人脸识别&#xff09; 编译出错记录 背景 因为主要使用qt&#xff0c;并且官网下载的win版本的编译好的opencv默认是vc的&#xff0c;所以我们需要自己下载opencv的源码使用mingw自行编译&#xff0c;我直接使用的vscode。 报错 报错…

1.9 数据结构之 并查集

编程总结 在刷题之前需要反复练习的编程技巧&#xff0c;尤其是手写各类数据结构实现&#xff0c;它们好比就是全真教的上乘武功 本栏目为学习笔记参考&#xff1a;https://leetcode.cn/leetbook/read/disjoint-set/oviefi/ 1.0 概述 并查集&#xff08;Union Find&#xff09…

以C++为例详解UML

以C为例详解UML —— 2024-04-14 文章目录 以C为例详解UML1. 什么是UML?2. UML模型结构3. UML中类的表示4. UML中类之间的关系4.1 泛化4.2 实现4.3 关联(1) 单向关联(2) 双向关联(3) 自关联(4) 多重关联 4.4 聚合4.5 组合4.6 依赖 5. 关联、组合、聚合与依赖的区别6. 补充笔…

华为机考入门python3--(15)牛客15-求int型正整数在内存中存储时1的个数

分类&#xff1a;二进制 知识点&#xff1a; int转二进制 binary bin(n)[2:] 题目来自【牛客】 def count_ones_in_binary(n): # 将输入的整数转换为二进制字符串 # bin(n)为0b11011binary bin(n)[2:]# 初始化计数器为0 count 0 # 遍历二进制字符串的每一位 fo…

消息队列RabbitMQ入门学习

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.收发消息 2.1.1.交换机 2.1.2.队列 2.1.3.绑定关系 2.1.4.发送消息 3.SpringAMQP 3.1WorkQueues模型 3.1.1消息接收 3.1.2测试 3.1.3.能者多劳 3.1.3.总结 3.2.交换机类型 3.3.Fanout交…