class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int n=nums.size();
vector<int> ans;
ans={0,0};
if(nums.size()==0){
ans[0]=-1;
ans[1]=-1;
return ans;
}
int rightB=getRight(nums,target);
int leftB=getLeft(nums,target);
if(rightB==-2||leftB==-2){
return {-1,-1};
}
if((rightB-leftB)>1){
return {leftB+1,rightB-1};
}else{
return {-1,-1};
}
}
private:
int getRight(vector<int>& nums, int target){
int l=0;
int r=nums.size()-1;
int mid=0;
int rightB=-2;
while(l<=r){
mid=(l+r)/2;
if(nums[mid]>target){
r=mid-1;
}else if(nums[mid]<=target){
l=mid+1;
rightB=l;
}
}
return rightB;
}
int getLeft(vector<int>& nums, int target){
int l=0;
int r=nums.size()-1;
int mid=0;
int leftB=-2;
while(l<=r){
mid=(l+r)/2;
if(nums[mid]>=target){
r=mid-1;
leftB=r;
}else if(nums[mid]<target){
l=mid+1;
}
}
return leftB;
}
};
参考代码随想录二分法求边界的方法