在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
方法一:二分查找
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if (nums.size() == 0) return {-1,-1};
vector<int> ans;
int l = -1,r = nums.size();
int l_a = -1,r_a = -1;
while (l+1 < r) {
int mid = (l+r)/2;
if (nums[mid] >= target) r = mid;
else l = mid;
}
if (r < nums.size() && nums[r] == target) l_a = r;
l = -1;
r = nums.size();
while (l+1 < r) {
int mid = (l+r)/2;
if (nums[mid] > target) r = mid;
else l = mid;
}
if (l >= 0 && nums[l] == target) r_a = l;
return {l_a,r_a};
}
};