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

二分查找--C++实现

1. 简介

满足有序性,每次排除一半的可能性。

2. 实现

2.1 手写
int bin_search(vector<int> &arr,int v) {int hi = arr.size() - 1;int lo = 0;while ( lo <= hi){int mid = (lo + hi) >> 1;if (arr[mid] < v)lo = mid + 1;elsehi = mid - 1;}return hi;
}
2.2 STL
  1. lower_bound()
    C++20之后才有
    找到第一不小于某个值的位置
  • 使用
lower_bound(potions.begin(), potions.end(), tar);
  • 实现
template<class ForwardIt, class T>
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value)
{ForwardIt it;typename std::iterator_traits<ForwardIt>::difference_type count, step;count = std::distance(first, last);while (count > 0){it = first; step = count / 2; std::advance(it, step);if (*it < value){first = ++it; count -= step + 1; }elsecount = step;}return first;
}
  1. upper_bound()
    找到第一个严格大于某个值的位置
    C++20之后才能用。
  • 使用

upper_bound(potions.begin(), potions.end(), tar);
  • 实现
template<class ForwardIt, class T>
ForwardIt upper_bound(ForwardIt first, ForwardIt last, const T& value)
{ForwardIt it;typename std::iterator_traits<ForwardIt>::difference_type count, step;count = std::distance(first, last);while (count > 0){it = first; step = count / 2; std::advance(it, step);if (!(value < *it)){first = ++it;count -= step + 1;} elsecount = step;}return first;
}

3. Ref

cppreference

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

相关文章:

  • 计算机毕设 基于机器学习的文本聚类 - 可用于舆情分析
  • uniApp获取当前位置经纬度
  • this.$message提示内容添加换行
  • “三大阶段稳定性测试”筑牢长安链信任基石
  • 手把手教你如何扩展(破解)mybatisplus的sql生成 | 京东云技术团队
  • Spring Data JPA 项目配置与QueryDSL集成
  • UE5数字孪生制作-数据篇(二) - 数据处理
  • Java 设计模式——享元模式
  • 再扩国产化适配版图,长安链新增数据库兼容性认证
  • MES系统数据集成系统源码
  • 关于道一云-七巧使用感悟
  • 去中心化数据云项目Oort主网即将上线
  • CSS知识点梳理(一)
  • 网络安全深入学习第八课——反向代理(工具:frp)
  • 浅谈前端自定义VectorGrid矢量瓦片样式
  • Qt5多线程<12>
  • Linux学习笔记之五(父子进程、孤儿进程、僵尸进程、守护进程)
  • [题] 不容易系列之(3)―― LELE的RPG难题 #DP
  • pip 安装任意软件包报错
  • NLP之Bert实现文本多分类
  • 对话大众软件子公司:中国的智舱、智驾比欧洲早一代
  • 基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序
  • 小型企业如何数字化转型?ZohoCRM助力小企业转型
  • 聊聊模板引擎<Template engine>
  • 多平台商品采集——API接口:支持淘宝、天猫、1688、拼多多等多个电商平台的爆款、销量、整店商品采集和淘客功能
  • UI自动化测试框架设计(Selenium)
  • towr code阅读
  • Channel扇出模式
  • 学者观察 | 联邦学习与区块链、大模型等新技术的融合与挑战-北京航空航天大学童咏昕
  • ubuntu连接蓝牙耳机