有一个按降序排列的数组容器LATI,想要找到容器内大于等于y的最后一个元素位置,并给出索引,写出相应代码
时间: 2024-09-17 09:07:39 浏览: 34
为了在降序排列的数组(`std::vector<int>` 或其他支持下标操作的容器)`LATI`中找到大于等于`y`的最后一个元素的位置(索引),你可以使用二分查找的方法。这里假设`LATI`已经排序并且不包含重复元素。
```cpp
#include <vector>
#include <algorithm>
int findLastIndex(std::vector<int>& LATI, int y) {
// 首先确保`y`不大于数组中的最大值
if (y > *std::rbegin(LATI)) {
return LATI.size(); // 如果y比所有元素都大,返回末尾
}
// 初始化左边界为0,右边界为数组长度减一
int left = 0;
int right = LATI.size() - 1;
while (left <= right) {
// 计算中间位置
int mid = left + (right - left) / 2;
// 检查中间元素是否大于等于y,如果不是,则更新左边界
if (LATI[mid] < y) {
left = mid + 1;
}
// 否则,如果中间元素大于等于y,检查右边元素,直到找到第一个大于等于y的元素或右边界小于左边界
else {
right = mid - 1;
}
}
// 返回大于等于y的第一个元素的索引(因为是降序,所以是最后一个)
return left;
}
```
这段代码首先判断`y`是否大于数组中的最大值。然后在一个递减搜索过程中不断调整左右边界,直到找到满足条件的元素或者搜索范围变为零。
阅读全文