给定一个长度为 $n$ 的有序数组 nums,其中可能包含重复元素。下面的函数返回数组中某个元素 target 的左边界,若数组中不包含该元素,则返回 $-1$。例如在数组 nums = [5,7,7,8,8,10] 中查找 target=8,函数返回 $8$ 在数组中的左边界的索引为 $3$。则横线上应填写的代码为( )。
int getLeftBoundary(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left < right) {
int middle = left + ((right - left) / 2);
if (target <= nums[middle])
________________________ // 在此处填入代码
else
left = middle + 1;
}
return nums[left] == target ? left : -1;
}根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。
填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。
【考点】二分查找(找左边界)|重复元素处理|循环终止条件
GESP 五级算法模块「二分查找」典型题型。命题人专门卡住只会写「找任意位置」基础二分的学生——五级要求的就是处理重复元素时的边界收缩,这是四级考不到的进阶细节。