1. 题目链接
34. 在排序数组中查找元素的第一个和最后一个位置
2. 题目描述
3. 解题方法
- 找到元素的第一个位置,也就是找大于等于目标的最小值
- 找到元素的最后一个位置,也就是找小于等于目标的最大值
- 可以利用2次二分查找来解决
3.1. 第一次查找
3.2. 第二次查找
4. 代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target)
{
vector<int> res;
if(nums.size() == 0) return {-1, -1};
int l = 0, r = nums.size() - 1;
while(l < r)
{
int mid = (r - l) / 2 + l;
if(nums[mid] >= target) r = mid;
else l = mid + 1;
}
if(nums[r] != target) return {-1, -1};
else res.push_back(r);
l = 0, r = nums.size() - 1;
while(l < r)
{
int mid = (r - l + 1) / 2 + l;
if(nums[mid] <= target) l = mid;
else r = mid - 1;
}
res.push_back(r);
return res;
}
};