给定一个有序数组nums,以及一个目标值target,编写一个函数findFirstAndLast来找到目标值第一次和最后一次出现的位置。如果目标值不存在于数组中,则返回{-1, -1}。用C++代码实现该函数,以下哪个选项是正确选择?
vector findFirstAndLast(vector& nums, int target) {
vector result = {-1, -1};
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
result[0] = mid;
result[1] = mid;
// 查找第一次出现的位置
while (left < mid) {
int m = left + (mid - left) / 2;
if (nums[m] == target) {
result[0] = m;
}
else {
left = m + 1;
}
}
// 查找最后一次出现的位置
while (mid < right) {
int m = mid + (right - mid) / 2;
if (nums[m] == target) {
result[1] = m;
}
else {
right = m - 1;
}
}
break;
}
else if (nums[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return result;}
将查找第一次出现位置代码块的while循环终止条件改为left <= mid,该函数也不会陷入死循环。