常规两次二分搜索。
第一次找第一个大于等于target的位置;
第二次找第一个大于target的位置;
注意排查末尾元素==target的情况。
vector<int> searchRange(vector<int>& nums, int target) {
int l=0,r=nums.size()-1,mid;
vector<int> result;
while(l<r)
{
mid=(l+r)/2;
if(nums[mid]<target)
{
l=mid+1;
}
else
{
r=mid;
}
}
if(l>=nums.size()||nums[l]!=target)
{
result.push_back(-1);
result.push_back(-1);
return result;
}
result.push_back(l);
l=0;
r=nums.size()-1;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]>target)
{
r=mid;
}
else
{
l=mid+1;
}
}
if(nums[l]==target)
{
result.push_back(l);
}
else
{
result.push_back(l-1);
}
return result;
}