题目描述
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].
题目已经给出时间复杂度为O(log n),所以采用二分法。
实现代码:
class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
vector<int> ret;
ret.push_back(-1);
ret.push_back(-1);
int left=0,right=n-1,mid;
while(left<=right)
{
if(A[left]==target && A[right]==target)
{
ret[0]=left;
ret[1]=right;
break;
}
mid=(left+right)/2;
if(A[mid]<target)
{
left=mid+1;
}
else
if(A[mid]>target)
{
right=mid-1;
}
else //有可能中间位置正好等于目标值;
{
if(A[right]==target) //此时只能判断右端是否等于目标值,
++left; //满足条件,左端向右移动;
else
--right; //满足条件,右端向左靠;
}
}
return ret;
}
};