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) {
vector<int> ivec;
int left=lower_bound(A,n,target);
if(left==n||A[left]!=target) {
ivec.push_back(-1);
ivec.push_back(-1);
return ivec;
}
ivec.push_back(left);
int right=upper_bound(A,n,target);
ivec.push_back(right-1);
return ivec;
}
//可插入target的第一个合适位置
int lower_bound(int A[],int n,int target){
int first=0,len=n,half;
int mid;
while(len>0){
half=len>>1;
mid=first+half;
if(A[mid]<target){
first=mid+1;
len=len-half-1;
}
else
len=half;
}
return first;
}
//可插入target的最后一个合适位置
int upper_bound(int A[],int n,int target){
int first=0,len=n,half;
int mid;
while(len>0){
half=len>>1;
mid=first+half;
if(A[mid]>target){
len=half;
}
else{
first=mid+1;
len=len-half-1;
}
}
return first;
}
};