給定升序數組(可含重複),找到目標值 target 的起始和結束位置。要求 O(log n)。不存在返回 [-1, -1]。
lower_bound)upper_bound)減 1[-1, -1]
vector searchRange(vector& nums, int target) {
auto lower = lower_bound(nums.begin(), nums.end(), target);
if (lower == nums.end() || *lower != target) return {-1, -1};
auto upper = upper_bound(nums.begin(), nums.end(), target);
return {int(lower - nums.begin()), int(upper - nums.begin()) - 1};
}
int lowerBound(vector& a, int target) {
int l=0, r=a.size();
while (l < r) {
int m = l + (r-l)/2;
if (a[m] < target) l = m+1;
else r = m;
}
return l;
}
int upperBound(vector& a, int target) {
int l=0, r=a.size();
while (l < r) {
int m = l + (r-l)/2;
if (a[m] <= target) l = m+1;
else r = m;
}
return l;
}