题目大意:在一个排序数组中找出一个数出现的范围,如果不存在就返回 -1 -1
方法是二分,我的方法是先找到这个数出现的某个位置pt,然后在0-pt间找左边界,在pt-n-1中找右边界
class Solution {
public:
int findnum(int A[],int low,int high,int num)
{
if(low>high)return -1;
int mid=(low+high)/2;
if(A[mid]==num)return mid;
if(A[mid]>num)return findnum(A,low,mid-1,num);
return findnum(A,mid+1,high,num);
};
int findleft(int A[],int low,int high,int num)
{
if(low>high)return high;
if(A[low]==num)return low;
int mid=(low+high)/2;
if(A[mid]!=num)return findleft(A,mid+1,high,num);
return findleft(A,low+1,mid,num);
};
int findright(int A[],int low,int high,int num)
{
if(low>high)return low;
if(A[high]==num)return high;
int mid=(low+high)/2;
if(A[mid]!=num)return findright(A,low,mid-1,num);
return findright(A,mid,high-1,num);
};
vector<int> searchRange(int A[], int n, int target) {
vector<int> result;
result.push_back(-1);
result.push_back(-1);
int pt=findnum(A,0,n-1,target);
if(pt==-1)return result;
result[0]=findleft(A,0,pt,target);
result[1]=findright(A,pt,n-1,target);
return result;
}
};