class Solution {
public:
std::vector searchRange(std::vector& nums, int target) {
std::vector result;
result.push_back(left_bound(nums, target));
result.push_back(right_bound(nums, target));
return result;
}
private:
int left_bound(std::vector& nums,int target){
int begin = 0;
int end = nums.size() - 1;
while(begin <= end){
int mid = (begin + end) / 2;
if(target == nums[mid]){
if(mid == 0 || target > nums[mid - 1]){
return mid;
}
//begin = mid - 1;
//求的是左端点 需要将end往左端点靠 往左边移动mid
end = mid - 1;
}else if(target < nums[mid]){
end = mid - 1;
}else if(target > nums[mid]){
begin = mid + 1;
}
}
return -1;
}
int right_bound(std::vector& nums,int target){
int begin = 0;
int end =nums.size() - 1;
while(begin <= end){
int mid =(begin + end)/2;
if(target == nums[mid]){
if(mid ==nums.size() - 1 || target < nums[mid + 1]){
return mid;
}
//
//end = mid + 1;
begin = mid + 1;
}else if(target < nums[mid]){
end = mid - 1;
}else if(target > nums[mid]){
begin = mid + 1;
}
}
return -1;
}
};