题目出处:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/
思路:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-xiang-jie-by-labuladong/
class Solution {
public:
int left_bound(vector<int>& nums, int target){
int l = 0, r = nums.size()-1; //闭区间
while(l <= r){ //跳出循环时,l = r+1
int mid = l + ((r-l)>>1);
if(nums[mid] < target){
l = mid + 1;
}
else if(nums[mid] > target){
r = mid - 1;
}
else{ //相等,压缩右边界
r = mid - 1;
}
}
if(l >= nums.size() || nums[l] != target){
return -1;
}
return l;
}
int right_bound(vector<int>& nums, int target){
int l = 0, r = nums.size()-1;
while(l <= r){ //跳出循环时,l = r+1
int mid = l + ((r-l)>>1);
if(nums[mid] < target){
l = mid + 1;
}
else if(nums[mid] > target){
r = mid - 1;
}
else{ //相等,压缩左边界
l = mid + 1;
}
}
if(r <= -1 || nums[r] != target){
return -1;
}
return r; // 或者 l-1
}
vector<int> searchRange(vector<int>& nums, int target) {
int left = left_bound(nums, target);
int right = right_bound(nums, target);
return {left, right};
}
};