首页 > 代码库 > LeetCode:Search for a Range

LeetCode:Search for a Range

题目描述:

Given a sorted array of integers, find the starting and ending position of a given target value.

Your algorithm‘s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].


思路:采用二分查找,在给定的数组中查找给定的元素,在查找的过程中记录数组中给定元素下标的最大值与最小值。


代码:

void getRange(int A[],int start,int end,int target,int & left,int & right,bool &flag)
{
    if(start > end)
        return;
    int mid = (start+end)/2;
    if(A[mid] == target)
    {
        if(mid < left)
            left = mid;
        if(mid > right)
            right = mid;
        flag = true;
        getRange(A,start,mid-1,target,left,right,flag);
        getRange(A,mid+1,end,target,left,right,flag);
    }
    else if(A[mid] > target)
        getRange(A,start,mid-1,target,left,right,flag);
    else if(A[mid] < target)
        getRange(A,mid+1,end,target,left,right,flag);
}

vector<int> Solution::searchRange(int A[], int n, int target) {
        int left = n-1;
    int right = 0;
    vector<int> result;
    bool flag = false;
    getRange(A,0,n-1,target,left,right,flag);
    if(flag)
    {
        result.push_back(left);
        result.push_back(right);
    }
    else
    {
        result.push_back(-1);
        result.push_back(-1);
    }
    return result;
    }


LeetCode:Search for a Range