若数组 ${a}$ 已按升序排列,则下面代码可以正确实现“在 ${a}$ 中查找第一个大于等于 ${x}$ 的元素的位置”。
int lowerBound(vector<int>& a, int x) {
int l = 0, r = a.size();
while (l < r) {
int mid = (l + r) / 2;
if (a[mid] >= x) r = mid;
else l = mid + 1;
}
return l;
}仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】二分查找|lowerBound 变体|边界处理
GESP 五级算法模块中的"二分查找"考点,命题人专卡考生对 lowerBound 与 upperBound 的边界混淆。