在升序数组中查找第一个大于等于 x 的位置,下面循环中横线应填( )。 int lowerBound(const vector& a, int x){ int L=0, r=a.size(); while(L= x) r = mid; else L = mid + 1; } return L;
A:r = mid;
B:r = mid - 1;
C:L = mid;
D:L = mid + 1;
正确答案:A
答案解析
使用二分查找在升序数组中定位第一个大于等于 x 的元素。初始化左边界 L 为 0,右边界 r 为数组长度。循环条件为 L < r。每次计算中点 mid = L + (r - L) / 2。若 a[mid] >= x,则该位置可能是目标位置,因此将 r 更新为 mid,保留 mid 在搜索范围内。否则 a[mid] < x,说明 mid 及其左侧都不可能满足条件,将 L 更新为 mid + 1。循环结束时 L 等于 r,且指向第一个满足条件的位置。更新 r 时必须包含 mid,更新 L 时必须排除 mid 及其左侧。
试卷来源:202603 CCF-GESP编程能力等级认证C++五级真题