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 };
[LeetCode] Search for a Range(二分法),布布扣,bubuko.com
[LeetCode] Search for a Range(二分法)
原文:http://www.cnblogs.com/Xylophone/p/3928096.html