题目: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)复杂度内找到已排序数组中目标数字的起始地址。
思路:因为是已排序且O(log n)复杂度,所以自然想到二分查找,另外在处理重复的数字。
vector<int> seares;
void searchRange_iter(int A[], int begin,int end, int target)
{
int l=-1;
int r=-1;
if(begin > end )
{
seares.push_back(l);
seares.push_back(r);
return;
}
int mid=(end+begin)/2;
if(A[mid]<target)
searchRange_iter(A,mid+1, end, target);
else if(A[mid]> target)
searchRange_iter(A,begin, mid-1, target);
else
{
l=mid;
r=mid;
while(l>=0&&A[l]==target)
l--;
while(r<=end && A[r]==target)
r++;
l++;
r--;
seares.push_back(l);
seares.push_back(r);
}
return ;
}