又是一个二分的很简单的题目。
递归调用。
class Solution {
public:
vector<int> idx_r;
vector<int> searchRange(int A[], int n, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
idx_r.resize(2);
idx_r[0]=-1;
idx_r[1]=-1;
if(n<=0) return idx_r;
else searchSub(A,0,n-1,target);
return idx_r;
}
void addToIndex(int idx)
{
if(idx_r[0]==-1)
{
idx_r[0]=idx;
}
else idx_r[0]=min(idx_r[0],idx);
idx_r[1]=max(idx_r[1],idx);
}
void searchSub(int A[],int l,int r,int target)
{
if(l>r) return;
if(l==r)
{
if(A[l]==target)
{
addToIndex(l);
}
}
int mid=(l+r)/2;
if(A[mid]==target)
{
addToIndex(mid);
searchSub(A,l,mid-1,target);
searchSub(A,mid+1,r,target);
}
else if(A[mid]<target)
{
searchSub(A,mid+1,r,target);
}
else
{
searchSub(A,l,mid-1,target);
}
}
};