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].
思路:二分查找,然后再往前后找即可。
1 class Solution { 2 public: 3 vector<int> searchRange(int A[], int n, int target) { 4 int i=biSearch(A,0,n,target); 5 vector<int> res(2,-1); 6 if(i==-1)return res; 7 int temp=i; 8 while(temp<n) 9 { 10 if(A[temp]!=target)break; 11 else temp++; 12 } 13 res[1]=temp-1; 14 temp=i; 15 while(temp>=0) 16 { 17 if(A[temp]!=target)break; 18 else temp--; 19 } 20 res[0]=temp+1; 21 return res; 22 } 23 int biSearch(int A[], int s, int e, int target) 24 { 25 if(s>e)return -1; 26 if(s==e)return A[s]==target?s:-1; 27 int mid=(s+e)/2; 28 if(A[mid]>target) return biSearch(A,s,mid,target); 29 else if(A[mid]<target)return biSearch(A,mid+1,e,target); 30 else return mid; 31 32 } 33 34 };
浙公网安备 33010602011771号