class Solution {
//字符串拼接法+hash表、二分查找左右逼近法、本次使用二分左右逼近法
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int>result1={-1,-1};
if(nums.size()==1){
if(nums[0]==target){
result1[0]=0;
result1[1]=0;
return result1;
}else{
return result1;
}
}
int low=0;
int height=nums.size()-1;
result1[0]=findFirst(low,height,target,nums);
result1[1]=findLast(low,height,target,nums,height);
return result1;
}
int findFirst(int low,int height,int target,vector<int>&nums){
while(low<=height){
int mid=(low+height)/2;
if(nums[mid]==target&&(mid-1<0||nums[mid-1]!=target)){
return mid;
}else if(nums[mid]>=target){
height=mid-1;
}
else{
low=mid+1;
}
}
return -1;
}
int findLast(int low,int height,int target,vector<int>&nums,int len){
while(low<=height){
int mid=(height+low)/2;
if(nums[mid]==target&&(mid>=len||nums[mid+1]!=target)){
return mid;
}else if(nums[mid]<=target){
low=mid+1;
}else{
height=mid-1;
}
}
return -1;
}
};