二分查找的变形,有序数组,允许重复数字,要求查找目标的区间,如果不存在目标,输出[-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; } };