题目要求O(lgn)的时间复杂度,可知需要利用二分法来解决
代码
class Solution {
public:
vector<int> searchRange(int A[], int n, int target) {
searchRangeHelper(A, 0, n-1, target);
if(res.size()==0)
{
res.push_back(-1);
res.push_back(-1);
}
return res;
}
void searchRangeHelper(int A[], int begin, int end, int target)
{
if(begin>end)
return ;
int mid = (begin+end)/2;
if(A[mid]==target)
{
int index1 = mid;
int index2 = mid;
while(index1>=begin)
{
if(A[index1]!=A[mid])
break;
index1--;
}
while(index2<=end)
{
if(A[index2]!=A[mid])
break;
index2++;
}
res.push_back(++index1);
res.push_back(--index2);
return ;
}
if(A[mid]>target)
{
end = mid - 1;
}
else
begin = mid + 1;
searchRangeHelper(A, begin, end, target);
}
private:
vector<int> res;
};