首页 > 代码库 > [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].

class Solution {public:    vector<int> searchRange(int A[], int n, int target) {        set<int> sIndex;        search(A,0,n-1,target,sIndex);        vector<int> result(2,-1);        if(!sIndex.empty()){            result[0] = *sIndex.begin();            result[1] = *(--sIndex.end());        }        return result;            }private:    void search(int A[],int start,int end,int target,set<int> &sIndex){                if(start == end){            if(A[start]==target){               sIndex.insert(start);               return;            }else               return;               }        int startIndex,endIndex;        int mid = start + (end-start)/2;                if(A[start]<=target && A[mid]>= target)             search(A,start,mid,target,sIndex);        if(A[mid+1]<=target && A[end]>= target)             search(A,mid+1,end,target,sIndex);    }//end func};