问题
https://leetcode.com/problems/search-for-a-range/
解决方法
二分查找,首先找到左边界,然后找到右边界。
查找左边界时,我们首先默认R是大于等于target的,然后需要查找[L, R-1] 处小于等于target 的最小位置并赋给R,最后比较R处是否等于target判断是否找到target;
查找右边界时, 首先默认L处是小于等于target的, 然后需要查找[L+1, R] 中小于等于target 的最大值赋给L;
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int L, R;
vector<int> ret(2,-1);
// find left pos;
L = 0; R = nums.size()-1;
while(L<R){ // find range [L, R-1];
int m = L+(R-L)/2;
if (target <= nums[m])
R = m;
else
L= m+1;
}
if (nums[R] != target)
return ret;
else
ret[0] = R;
L =R; R = nums.size()-1;
while(L<R){
int m = L+(R-L+1)/2;// find range [L+1, R];
if (nums[m] <= target)
L= m;
else
R= m-1;
}
ret[1] = L;
return ret;
}
};