首页 » 编程之美 » 正文

[leetcode_34]Search for a Range

二分查找的变形,有序数组,允许重复数字,要求查找目标的区间,如果不存在目标,输出[-1,-1]。

class Solution {
public:
    void bSearch(int A[],int left,int right,int target,int flag,int &val) {
        if(left > right)return ;
        int mid = (left + right) / 2;
        if(A[mid] == target) {
            val = mid;
            if(flag == 0) {
                bSearch(A,left,mid-1,target,flag,val);
            }
            else {
                bSearch(A,mid+1,right,target,flag,val);
            }
        }
        else
            if(A[mid] < target) {
                bSearch(A,mid+1,right,target,flag,val);
            }
            else {
                bSearch(A,left,mid-1,target,flag,val);
            }
    }
    vector<int> searchRange(int A[], int n, int target) {
        vector<int> ans;
        ans.clear();
        int left = -1;
        int right = -1;
        bSearch(A,0,n-1,target,0,left);
        bSearch(A,0,n-1,target,1,right);
        ans.push_back(left);
        ans.push_back(right);
        return ans;
    }
};

发表评论