当前位置: 首页 > news >正文

二分查找:自定义 upper_bound、lower_bound

二分查找详细介绍可以看这篇文章,此篇文章介绍返回索引的 upper_bound 和 lower_bound 的 C++ 实现。

lower_bound 实现代码

#include <vector>int lower_bound_index(const std::vector<int>& vec, const int& target) {int left = 0;int right = vec.size(); // 注意这里是size,不是size-1while (left < right) { // 当left == right时,搜索结束int mid = left + (right - left) / 2; // 防止溢出if (vec[mid] < target) {left = mid + 1; // 搜索区间变为[mid+1, right]} else {right = mid; // 搜索区间变为[left, mid]}}return left; // 返回不小于target的第一个元素的索引
}

upper_bound 实现代码

#include <vector>int upper_bound_index(const std::vector<int>& vec, const int& target) {int left = 0;int right = vec.size(); // 注意这里是size,不是size-1while (left < right) { // 当left == right时,搜索结束int mid = left + (right - left) / 2; // 防止溢出if (vec[mid] <= target) {left = mid + 1; // 搜索区间变为[mid+1, right]} else {right = mid; // 搜索区间变为[left, mid]}}return left; // 返回大于target的第一个元素的索引
}

比较

lower_boundupper_bound 的区别主要于比较条件,lower_bound 的比较条件是 vec[mid] < target 而 upper_bound 是 vec[mid] <= target,这也是它们达成不同效果的关键。

http://www.lryc.cn/news/387215.html

相关文章:

  • Java 搭建个人博客基本框架
  • 停车场智能化管理:车位引导系统实现车位资源优化与数据分析
  • 梯度下降法
  • 【高考志愿】光学工程
  • Golang | Leetcode Golang题解之第205题同构字符串
  • 【Unity】RPG2D龙城纷争(五)关卡编辑器之地图编辑
  • 音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介
  • 基于深度学习的人脸关键点检测
  • C++自定义智能指针
  • 一个合理的前端应用文件结构
  • spring和springboot的关系是什么?
  • 智慧校园-医务管理系统总体概述
  • AUTOSAR汽车电子嵌入式编程精讲300篇-智能网联汽车CAN总线-基于电压信号的CAN总线入侵检测系统设计与实现
  • BLACKBOX.AI:解锁编程学习新纪元,加速开发的AI得力助手
  • 实验三 时序逻辑电路实验
  • 云计算基础技术
  • 【动态规划】2306. 公司命名
  • 熟练掌握爬虫技术
  • 基于Spring Boot与Vue的智能房产匹配平台+文档
  • 【VMware】VMware 开启的虚拟机无法联网的解决方案
  • linux——线程
  • install nebula with source
  • 拆分盘投资策略解析:机制、案例与风险考量
  • Redis主从复制、哨兵模式以及Cluster集群
  • 【chatgpt】npy文件和npz文件区别
  • 为什么IP地址会被列入黑名单?
  • 【OceanBase诊断调优】—— 如何查找表被哪些其它表引用外键
  • 网络编程常见问题
  • 回调函数的使用详解
  • <电力行业> - 《第8课:输电(一)》