【题目描述】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>result;
if(A==NULL||n==0)
return result;
int left = helper1(A,n,target);
int right = helper2(A,n,target);
result.push_back(left);
result.push_back(right);
return result;
}
int helper1(int A[],int n,int target){
int start = 0;
int end = n-1;
while(start<=end){
int mid = start + (end - start)/2;
if(A[mid]<target)
start = mid+1;
else if(A[mid]>target)
end = mid-1;
else if(A[mid]==target&&(A[mid-1]!=target||mid == 0))
return mid;
else
end = mid -1;
}
return -1;
}
int helper2(int A[],int n,int target){
int start =0;
int end = n-1;
while(start<=end){
int mid =start +(end-start)/2;
if(A[mid]<target)
start = mid+1;
else if(A[mid]>target)
end = mid-1;
else if(A[mid]==target&&(A[mid+1]!=target||mid == n-1))
return mid;
else
start = mid +1;
}
return -1;
}
};