34.在排序数组中查找元素的第一个和最后一个位置 (Medium)*
题目描述*

标签*
二分查找;
思路 & 代码*
经典的二分检索左右边界,检索区间为 [l, r)。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res(2);
int n = nums.size();
int l = 0, r = n;
while(l < r) {
int mid = l + (r - l) / 2;
if(nums[mid] >= target) {
r = mid;
}else {
l = mid + 1;
}
}
if(l == n || nums[l] != target) {
return {-1, -1};
}
res[0] = l;
l = 0, r = n;
while(l < r) {
int mid = l + (r - l) / 2;
if(nums[mid] > target) {
r = mid;
}else {
l = mid + 1;
}
}
res[1] = l - 1;
return res;
}
};
最后更新: July 23, 2022