Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
先binary search,然后前后找一下。。。。
class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
vector<int> res(2,-1);
int ind=binarySearch(0,n-1,target, A);
if (ind==-1)
return res;
int beg=ind;
while(beg>0 && A[beg-1]==target)
beg--;
int end=ind;
while (end<n-1 && A[end+1]==target)
end++;
res[0]=beg;
res[1]=end;
return res;
}
int binarySearch(int beg, int end, int target, int A[]){
if (beg>end)
return -1;
int mid=(beg+end)/2;
if (A[mid]==target)
return mid;
if (A[mid]<target)
return binarySearch(mid+1,end,target,A);
else
return binarySearch(beg,end-1,target,A);
}
};