Search for a Range:from LeetCode

来源:互联网 发布:淘宝全球购店铺转让 编辑:程序博客网 时间:2024/06/06 02:15

题目大意:在一个排序数组中找出一个数出现的范围,如果不存在就返回 -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;    }};


0 0
原创粉丝点击