二分法lower_bound
时间: 2023-10-14 22:04:36 浏览: 82
二分法
二分法的 lower_bound 是一种常用的查找算法,用于在有序数组中找到第一个大于等于目标值的元素位置。下面是一个示例代码:
```cpp
#include <iostream>
#include <vector>
// 二分法的 lower_bound
int lowerBound(const std::vector<int>& nums, int target) {
int left = 0;
int right = nums.size(); // 注意右边界是数组的长度,不包含最后一个元素
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
int main() {
std::vector<int> nums = {2, 4, 6, 8, 10};
int target = 5;
int index = lowerBound(nums, target);
std::cout << "The lower bound index for " << target << " is: " << index << std::endl;
return 0;
}
```
上述代码中,lowerBound 函数接受一个有序数组 `nums` 和目标值 `target`,返回第一个大于等于目标值的元素位置(如果不存在,则返回数组长度)。通过不断缩小搜索范围,直到找到满足条件的位置。
在给定示例中,数组 `nums` 为 {2, 4, 6, 8, 10},目标值为 5。函数应该返回 2,因为数组中第一个大于等于 5 的元素是 6,其位置为索引 2。
希望这个例子能够帮助你理解二分法的 lower_bound。如果有任何疑问,请随时提问!
阅读全文