- 需要引用头文件
#include <algorithm>
-
lower_bound
采用二分查找在一个有序序列 [i,j) 中,返回第一个 >= 目标值的元素的迭代器 it -
upper_bound
采用二分查找在一个有序序列 [i,j) 中,返回第一个 > 目标值的元素的迭代器 it -
使用示例
vector<int> nums = {0,0,0,1,3,4};
//nums中第一个大于2的元素的下标
int res = lower_bound(nums.begin(),nums.end(),2)-nums.begin();
- 二分查找实现
//nums中第一个大于等于target的元素的下标
int searchInsert(vector<int>& nums, int target) {
int left = 0;
int right = nums.size()-1;
while(left <= right)
{
int mid = left + (right-left)/2;
if( nums[mid] > target )
{
resault = mid;//找到比target 大的元素了
right = mid-1;//继续找看有没更小的
}
else if( nums[mid] < target )
{
left = mid +1;
}
else
{
resault = mid;//找到等于target 的元素了
right = mid-1;//继续找看有没重复的
}
}
return resault;
}