class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
//二分查找,由于会出现重复数字的情况
vector<int> result;
if(n==0)
{
result.push_back(-1);
result.push_back(-1);
return result;
}
if(n==1)
{
if(A[0]==target)
{
result.push_back(0);
result.push_back(0);
return result;
}
if(A[0]!=target)
{
result.push_back(-1);
result.push_back(-1);
return result;
}
}
if(n>1)
{
int src=0;
int des=n-1;
// int mid=src+(des-src)/2;
while(src<=des)
{
int mid=src+(des-src)/2;
if(A[mid]==target)
{//如果正好找到目标数,则需要判断它的起始和终止位置
int i=mid;
int j=mid;
while(i>0)
{
if(A[i]==A[i-1])
i--;
else
break;
}
result.push_back(i);
while(j<n-1)
{
if(A[j]==A[j+1])
j++;
else
break;
}
result.push_back(j);
return result;
}
if(A[mid]>target)
{
des=mid-1;
}
if(A[mid]<target)
{
src=mid+1;
}
}
if(result.empty())
{
result.push_back(-1);
result.push_back(-1);
return result;
}
}
}
};