`lower_bound`、`upper_bound` 和 `last_less_equal`

lower_boundupper_boundlast_less_equal。它们的作用是在 有序数组 中查找目标值的位置。下面是对每个函数的详细解释:


1. lower_bound 函数

功能:

在有序数组 a 中查找第一个 大于或等于 target 的元素的位置。

参数:
  • a[]:有序数组。
  • n:数组的长度。
  • target:目标值。
实现逻辑:
  1. 初始化左边界 l = 0,右边界 r = n - 1
  2. 使用二分查找:
    • 计算中间位置 mid = l + (r - l) / 2
    • 如果 a[mid] >= target,说明目标值在左半部分,更新右边界 r = mid
    • 否则,目标值在右半部分,更新左边界 l = mid + 1
  3. 最终返回 l,即第一个大于或等于 target 的位置。
示例:
int a[] = {1, 3, 5, 7, 9};
int n = 5;
int target = 5;
int pos = lower_bound(a, n, target); // 返回 2

2. upper_bound 函数

功能:

在有序数组 a 中查找第一个 大于 target 的元素的位置。

参数:
  • a[]:有序数组。
  • n:数组的长度。
  • target:目标值。
实现逻辑:
  1. 初始化左边界 l = 0,右边界 r = n - 1
  2. 使用二分查找:
    • 计算中间位置 mid = l + (r - l) / 2
    • 如果 a[mid] > target,说明目标值在左半部分,更新右边界 r = mid
    • 否则,目标值在右半部分,更新左边界 l = mid + 1
  3. 最终返回 l,即第一个大于 target 的位置。
示例:
int a[] = {1, 3, 5, 7, 9};
int n = 5;
int target = 5;
int pos = upper_bound(a, n, target); // 返回 3

3. last_less_equal 函数

功能:

在有序数组 a 中查找最后一个 小于或等于 target 的元素的位置。

参数:
  • a[]:有序数组。
  • n:数组的长度。
  • target:目标值。
实现逻辑:
  1. 调用 upper_bound 函数,找到第一个大于 target 的位置。
  2. 返回 upper_bound(a, n, target) - 1,即最后一个小于或等于 target 的位置。
示例:
int a[] = {1, 3, 5, 7, 9};
int n = 5;
int target = 5;
int pos = last_less_equal(a, n, target); // 返回 2

4. 总结

  • lower_bound:查找第一个 大于或等于 target 的位置。
  • upper_bound:查找第一个 大于 target 的位置。
  • last_less_equal:查找最后一个 小于或等于 target 的位置。

这些函数在有序数组中非常有用,常用于解决 查找问题范围查询问题


5. 完整代码

#include <iostream>
using namespace std;int lower_bound(int a[], int n, int target) {int l = 0, r = n - 1;while (l < r) {int mid = l + (r - l) / 2;if (a[mid] >= target) r = mid;else l = mid + 1;}return l;
}int upper_bound(int a[], int n, int target) {int l = 0, r = n - 1;while (l < r) {int mid = l + (r - l) / 2;if (a[mid] > target) r = mid;else l = mid + 1;}return l;
}int last_less_equal(int a[], int n, int target) {return upper_bound(a, n, target) - 1;
}int main() {int a[] = {1, 3, 5, 7, 9};int n = 5;int target = 5;cout << "lower_bound: " << lower_bound(a, n, target) << endl; // 输出 2cout << "upper_bound: " << upper_bound(a, n, target) << endl; // 输出 3cout << "last_less_equal: " << last_less_equal(a, n, target) << endl; // 输出 2return 0;
}

6. 适用场景

  • 查找问题:在有序数组中查找目标值的位置。
  • 范围查询:查找满足某个条件的元素范围。
  • 插入位置:确定目标值在有序数组中的插入位置。

这些函数是二分查找的经典应用,理解它们有助于解决许多算法问题。

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

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

相关文章

网络安全常识科普(百问百答)

汪乙己一到店&#xff0c;所有喝酒的人便都看着他笑&#xff0c;有的叫道&#xff0c;“汪乙己&#xff0c;你又监控员工隐私了&#xff01;”他不回答&#xff0c;对柜里说&#xff0c;“来两个fofa。”便排出三个比特币。他们又故意的高声嚷道&#xff0c;“你一定又在电报群…

JSON 序列化 反序列化

序列化&#xff0c;反序列化 其实就是转换数据格式的过程。 序列化 (Serialization) 是将【对象的状态信息】转换为【可以存储或传输的形式】的过程。即&#xff1a;把C#中的类 转换成 JSON格式的字符串&#xff0c;就是序列化。其中【对象的状态信息】就是类的各种属性。 …

如何优化AI模型的Prompt:深度指南

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI模型在文本生成、翻译、问答等领域的应用越来越广泛。在使用这些模型时&#xff0c;**Prompt&#xff08;提示&#xff09;**的质量直接影响输出结果的好坏。优化Prompt不仅能提升生成文本的准确性&#xf…

五大基础算法——模拟算法

模拟算法 是一种通过直接模拟问题描述的过程或规则来解决问题的算法思想。它通常用于解决那些问题描述清晰、步骤明确、可以直接按照规则逐步实现的问题。以下是模拟算法的核心概念、适用场景、实现方法及经典例题&#xff1a; 一、核心概念 问题描述清晰 问题的规则和步骤明确…

【DeepSeek应用】DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了,虽然经过扩容和调整,但反应依旧不稳定,甚至小圆圈转半天最后却提示“服务器繁忙,请稍后再试。” 故此,本文通过讲解在本地部署 DeepSeek并配合python代码实现,让你零成本搭建自己的AI助理,无惧任务提交失败的压力。 一、环境准备 1. 安装依赖库 …

过滤空格(信息学奥赛一本通-2047)

【题目描述】 过滤多余的空格。一个句子中也许有多个连续空格&#xff0c;过滤掉多余的空格&#xff0c;只留下一个空格。 【输入】 一行&#xff0c;一个字符串&#xff08;长度不超过200&#xff09;&#xff0c;句子的头和尾都没有空格。 【输出】 过滤之后的句子。 【输入样…

一周学会Flask3 Python Web开发-SQLAlchemy更新数据操作-班级模块

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili list.html页面&#xff0c;加一个更新操作超链接&#xff1a; <!DOCTYPE html> <html lang"en"> <…

.NET Framework华为云流水线发布

文章目录 前言一、新建代码检查二、新建编译构建三、新建部署三、新建流水线 前言 华为云流水线发布&#xff1a;自动检查代码&#xff0c;打包发布到服务器 一、新建代码检查 检查代码是否存在报错 设置规则集 二、新建编译构建 三、新建部署 模板选择空模板或者自己去创建…

ngx_event_conf_t

ngx_event_conf_t 定义在 src\event\ngx_event.h typedef struct {ngx_uint_t connections;ngx_uint_t use;ngx_flag_t multi_accept;ngx_flag_t accept_mutex;ngx_msec_t accept_mutex_delay;u_char *name;#if (NGX_DEBUG)ngx_array_t debug_conne…

React19源码系列之createRoot的执行流程是怎么的?

2024年12月5日&#xff0c;react发布了react19版本。后面一段时间都将学习它的源码&#xff0c;并着手记录。 react官网&#xff1a;react19新特性 https://react.dev/blog/2024/12/05/react-19 在用vite创建react项目的使用&#xff0c;main.tsx主文件都会有以下代码。 //i…

设备管理VTY(Telnet、SSH)

实验目的&#xff1a;物理机远程VTY通过telnet协议登录AR1,ssh协议登录AR2和sw 注意配置Cloud1&#xff1a; 注意&#xff01;&#xff01;博主的物理机VMnet8--IP&#xff1a;192.168.160.1&#xff0c;所以AR1路由0/0/0端口才添加IP&#xff1a;192.168.160.3&#xff0c;每个…

使用VisualStdio制作上位机(一)

文章目录 使用VisualStudio制作上位机(一)写在前面第一部分:创建应用程序第二部分:GUI主界面设计使用VisualStudio制作上位机(一) Author:YAL 做了一些补充更新,2025-3-16 写在前面 1.达到什么目的呢 本文主要讲怎么通过Visual Studio 制作上位机,全文会以制作过程…

Anaconda conda常用命令:从入门到精通

1 创建虚拟环境 conda create -n env_name python3.8 2 创建虚拟环境的同时安装必要的包 conda create -n env_name numpy matplotlib python3.8 3 查看有哪些虚拟环境 以下三条命令都可以。注意最后一个是”--”&#xff0c;而不是“-”. conda env list conda info -e c…

Linux 下 MySQL 8 搭建教程

一、下载 你可以从 MySQL 官方下载地址 下载所需的 MySQL 安装包。 二、环境准备 1. 查看 MySQL 是否存在 使用以下命令查看系统中是否已经安装了 MySQL&#xff1a; rpm -qa|grep -i mysql2. 清空 /etc/ 目录下的 my.cnf 执行以下命令删除 my.cnf 文件&#xff1a; [roo…

【Go】函数闭包、堆和栈的概念

闭包 闭包机制解析 在函数式编程中&#xff0c;闭包&#xff08;Closure&#xff09; 是一种特殊的函数结构&#xff0c;其核心特性是能够捕获并持有外部函数的上下文环境变量。这一机制打破了传统函数中局部变量的生命周期规则&#xff1a; 常规局部变量 在函数被调用时创建…

【源码分析】Nacos服务注册源码分析-客户端

Nacos客户端入口 首先在我们使用Nacos时&#xff0c;会在客户端引入对应的依赖&#xff0c;例如需要Nacos的注册中心功能需要引入 <!--nacos-discovery 注册中心依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-c…

Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用&#xff1a;避免空指针异常2.3 为什么要用&#xff1f;2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明&#xff1a; orElse 如何使用orElseGet 如何使用两者的…

数据结构-树(详解)

目录 一、树的基本概念二、树的节点结构三、树的基本操作&#xff08;一&#xff09;插入操作&#xff08;二&#xff09;删除操作&#xff08;三&#xff09;查找操作&#xff08;四&#xff09;遍历操作 四、树的实现五、总结 一、树的基本概念 树是一种非线性数据结构&…

【eNSP实战】配置端口映射(NAT Server)

拓图 要求&#xff1a; 将AR1上的GE 0/0/1接口的地址从TCP协议的80端口映射到内网 Web服务器80端口 AR1接口配置 interface GigabitEthernet0/0/0ip address 192.168.0.1 255.255.255.0 # interface GigabitEthernet0/0/1ip address 11.0.1.1 255.255.255.0 # ip route-s…

RabbitMQ 基本原理详解

1. 引言 在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件、提高系统可靠性和扩展性的重要工具。RabbitMQ 作为一款开源的消息中间件&#xff0c;因其高性能、易用性和丰富的功能&#xff0c;被广泛应用于各种场景。…