二分查找。
先确定某个target的位置,然后分别二分查找其左右边界。
vector<int> searchRange(int A[], int n, int target) {
vector<int> res(2,-1);
int i = 0, j = n-1;
int mid;
while(i<=j){
mid = i+(j-i)/2;
if(A[mid]==target)
break;
if(A[mid]<target)
i = mid+1;
else
j = mid-1;
}
if(i>j)
return res;
i = 0;j = mid;
int mid_left, mid_right;
while(i<j){
mid_left = i+(j-i)/2;
if(A[mid_left]==target)
j = mid_left-1;
else
i = mid_left+1;
}
res[0] = (A[i]==target?i:i+1);
i = mid;j = n-1;
while(i<j){
mid_right = i+(j-i)/2;
if(A[mid_right]==target)
i = mid_right+1;
else
j = mid_right-1;
}
res[1] = (A[j]==target?j:j-1);
return res;
}