lower_bound upper_bound源代码,以及小于等于关键词最大的数的位置

本文介绍了C++中lower_bound和upper_bound函数的源代码及应用,这两个函数基于二分查找,分别找到大于等于目标值的最小元素和大于目标值的最小元素。同时,讲解了如何利用upper_bound找到小于等于特定值k的最大值位置,注意处理边界情况。
摘要由CSDN通过智能技术生成

前提:本质上都是二分查找,这就意味着一定要是先排好顺序的。注意:都只能对整个数组进行二分查找

时间复杂度:O(logn)

1.lower_bound返回值为大于等于key的最小的值

源码如下:

//接口:排好序的数组的首地址(且只能是首地址),数组的大小size(不是位置),以及要比较的关键词
//返回大于等于k的最小值,如果找不到,返回的值是size(n)
int lower_bound(int *array, int size, int key)
{
    //len表示元素的个数
    int first = 0, middle;//first表示一段区间的首地址
    int half, len;
    len = size;

    while(len > 0) {//len表示的是要寻找的区间的长度
        half = len >> 1;//右移1位除二
        middle = first + half;
        if(array[middle] < key) {//如果不在middle上,那么要在右面的区间上
            first = middle + 1;//不包括middle本身
            len = len-half-1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值