`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.pswp.cn/news/898047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898047.shtml
英文地址,請注明出處:http://en.pswp.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;被廣泛應用于各種場景。…