
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
int left = lcoateleft(nums,0,nums.size()-1,target);
int right = lcoateright(nums,0,nums.size()-1,target);
res.push_back(left);
res.push_back(right);
return res;
}
int lcoateleft(vector<int> nums,int left, int right, int target){
int res = -1;
while(left<=right){
cout<<"flag1:"<<left<<" "<<right<<endl;
//cout<<"left: "<<left<<" "<<right<<end;
int mid = (left+right)/2;
if(target>nums[mid])
left = mid+1;
else if(target<nums[mid])
right =mid-1;
else {
if((mid-1)<0||(mid-1)>=0&&nums[mid-1]!=target){
res = mid;
return res;
}
else
right = mid-1;
}
}
return res;
}
int lcoateright(vector<int> nums,int left, int right, int target){
int res = -1;
while(left<=right){
cout<<"flag2: "<<left<<" "<<right<<endl;
// cout<<"flag2:"<<left<<" "<<right<<end;
int mid = (left+right)/2;
if(target>nums[mid])
left = mid+1;
else if(target<nums[mid])
right =mid-1;
else {
/* else 的前提条件是nums[mid]==target
然后(mid+1)>=nums.size()说明到末尾了,找到右边界了
或者 没到末尾,但是nums[mid+1]!=target此时也找到右边界了
*/
if((mid+1)>=nums.size()||(mid+1)<nums.size()&&nums[mid+1]!=target){
res = mid;
return res;
}
else
left = mid+1;
}
}
//lcoateleft(nums,left,right,target);
return res;
}
};