✏️ 纠错
第 187 题 / 共 251 题
第11题 下面的 C++代码用于在升序数组lst中查找目标值target最后一次出现的位置。相关说法,正确的是( )。
int binary_search_last_occurrence(const vector<int>& lst, int target) {
if (lst.empty()) return -1;
int low = 0, high = lst.size() - 1;
while (low < high) {
int mid = (low + high + 1) / 2;
if (lst[mid] <= target) {
low = mid;
} else {
high = mid - 1;
}
}
if (lst[low] == target)
return low;
else
return -1;
}你真棒!
📝 题目解析
答案:A
知识点:二分查找的变体,查找目标值最后一次出现的位置及算法细节
解析:A正确,代码通过mid = (low + high + 1)/2实现“向上取整”,确保在重复元素中最终定位到最后一个;B错误,此时high会减到-1,最终low为0但lst[0] > target,返回-1;C错误,修改循环条件会导致死循环;D错误,改为普通取整会导致在某些情况无法正确定位最后一个元素(如low=2, high=3时,mid计算错误)。