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,
return [3,
4]
.
class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<int> ret(2,-1);
int pivot=bisearch(A,n,target);
if(pivot==-1)
return ret;
ret.clear();
int i,j;
for(i=pivot ; i>=0 && A[i]==target ; i--);
i++;
for(j=pivot ; j<n && A[j]==target ; j++);
j--;
ret.push_back(i);
ret.push_back(j);
return ret;
}
int bisearch(int A[] , int n , int target){
int left=0;
int right=n-1;
int middle=0;
while(left<=right){
middle=((right-left)>>1)+left;
if(A[middle]<target)
left=middle+1;
else if(A[middle]>target)
right=middle-1;
else
return middle;
}
return -1;
}
};
不过很可惜的是,这样做是满足不了题目中要求的0(logn)的时间复杂度的,举个简单的例子[1,1,1,1,1,1,1,1,1,1,1,1,1,1],按照上面的算法,时间复杂度为0(n)