15分钟带你了解lower_bound和upper_bound

简介: 🍀理解,学会lower_bound和upper_bound原理及其用法
🏆今日学习目标:
🍀理解,学会lower_bound和upper_bound原理及其用法
✅创作者:贤鱼

请添加图片描述

lower_bound

==定义:找到第一个大于等于目标数字的数字==
==注意,lower和upper返回的都是地址,减去数组得到下标==

用法lower_bound(数组开始搜索位置,数组结束搜索位置,目标数字);
int lu[7]={0,1,2,4,7,16,32};
这里定义一个数组,方便讲解,开头是0让第一个数字下标从1开始
cout<<lower_bound(lu,lu+6,7)-lu<<" "<<lu[lower_bound(lu,lu+6,7)-lu]<<endl;
输出内容,数组内下标为4的数据正式7,同时7等于7
在这里插入图片描述

upper_bound

==定义:找到第一个大于目标数字的数字==

用法upper_bound(数组开始搜索位置,数组结束搜索位置,目标数字);
cout<<upper_bound(lu,lu+6,7)-lu<<" "<<lu[upper_bound(lu,lu+6,7)-lu]<<endl;
输出了5,和16,很明显下标为5的正式16,同时在这个升序数组中第一个比他大的正式16
在这里插入图片描述

其他用法

==前面讲过了如何找到第一个大于或者大于等于目标数字的下标,现在讲一下如何找到小于或者小于等于数字的下标==
int up[7]={66,32,16,9,7,3,2};
这里

小于等于

==我们在目标数字后面加一个greater可以实现==
cout<<lower_bound(up,up+6,7,greater<int>())-up<<" "<<up[lower_bound(up,up+6,7,greater<int>())-up]<<endl;
可以看到返回了4和7,因为我们重新定义的数组下标为4的数字正好为7,由此可见我们实现了寻找小于等于目标数字
在这里插入图片描述

小于

cout<<upper_bound(up,up+6,7,greater<int>())-up<<" "<<up[upper_bound(up,up+6,7,greater<int>())-up]<<endl;
这里输出了5和3,下标为5的数字是3,这里寻找==小于==目标数字的,所以不选择7,选择了3
在这里插入图片描述

总结

    int lu[7]={0,1,2,4,7,16,32}; 
    cout<<lower_bound(lu,lu+6,7)-lu<<" "<<lu[lower_bound(lu,lu+6,7)-lu]<<endl;    //第一个大于等于
    cout<<upper_bound(lu,lu+6,7)-lu<<" "<<lu[upper_bound(lu,lu+6,7)-lu]<<endl;    //第一个大于
    int up[7]={66,32,16,9,7,3,2};
    cout<<lower_bound(up,up+6,7,greater<int>())-up<<" "<<up[lower_bound(up,up+6,7,greater<int>())-up]<<endl;//第一个小于等于  
    cout<<upper_bound(up,up+6,7,greater<int>())-up<<" "<<up[upper_bound(up,up+6,7,greater<int>())-up]<<endl; //第一个小于
==今天的学习就到这里,对您有帮助的话可以订阅一下专栏,内容持续更新奥==

请添加图片描述

相关文章
|
5月前
|
存储 算法
【洛谷 P1102】A-B 数对 题解(向量+lower_bound+upper_bound)
这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。输出是满足条件的数对数量。使用排序和二分查找优化算法,代码中给出了 AC 解决方案。样例输入为 \( N=4, C=1 \),序列 \( 1, 1, 2, 3 \),输出为 \( 3 \)。数据范围:\( 1 \leq N \leq 2 \times 10^5 \),\( 0 \leq a_i &lt; 2^{30} \),\( 1 \leq C &lt; 2^{30} \)。
39 0
|
机器学习/深度学习
LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用
LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用
|
API
LeetCode 375. Guess Number Higher or Lower II
我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字。 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。 然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。
110 0
LeetCode 375. Guess Number Higher or Lower II
|
API
LeetCode 374. Guess Number Higher or Lower
我们正在玩一个猜数字游戏。 游戏规则如下: 我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。 每次你猜错了,我会告诉你这个数字是大了还是小了。
76 0
LeetCode 374. Guess Number Higher or Lower
|
索引
LeetCode 416. Partition Equal Subset Sum
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
107 0
LeetCode 416. Partition Equal Subset Sum
|
C++ Python
LeetCode 709. To Lower Case
LeetCode 709. To Lower Case
103 0
|
算法 C#
算法题丨Longest Consecutive Sequence
描述 Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
1117 0