class Solution {
public:
int lower(vector
int n=nums.size();
int left=0;
int right=n-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]<target){
left=mid+1;
} else if(nums[mid]>=target){
right=mid-1;
}
}
return left;
}
vector
int n=nums.size();
int start=lower(nums,target);
if (start == nums.size() || nums[start] != target) {
return {-1, -1}; // nums 中没有 target
}
int end=lower(nums,target+1)-1;
return {start,end};
}
};
在 lower 函数中:
int n = nums.size(); int left = 0; int right = n - 1;:初始化左右边界。
while (left <= right) {... }:二分查找的循环。
if (nums[mid] < target) {... }:如果 nums[mid] 小于 target,更新 left 为 mid + 1,使查找范围向右半部分移动。
else if (nums[mid] >= target) {... }:如果 nums[mid] 大于或等于 target,更新 right 为 mid - 1,使查找范围向左半部分移动。
return left;:最终 left 会停在第一个大于或等于 target 的元素的位置。
在 searchRange 函数中:
int start = lower(nums, target);:调用 lower 函数找到 target 的起始位置。
if (start == nums.size() || nums[start]!= target) {... }:检查 target 是否存在。
int end = lower(nums, target + 1) - 1;:找到 target + 1 的起始位置并减 1 得到 target 的结束位置。