equal_range:[lower_bound, upper_bound)
// first && >= target
int lower_bound(vector<int>& nums, int target) {
int lo = 0, hi = nums.size() - 1;
// lo:lo左侧的值,均<target;
// hi:hi右侧的值,均>=target;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (nums[mid] < target) {
lo = mid + 1;
} else { // nums[mid] >= target
hi = mid - 1; // mid - 1 !!
}
}
return lo;
}
// first && > target
int upper_bound(vector<int>& nums, int target) {
int lo = 0, hi = nums.size() - 1;
// lo:lo左侧的值,均<=target;
// hi:hi右侧的值,均>target;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (nums[mid] <= target) {
lo = mid + 1;
} else { // nums[mid] > target
hi = mid - 1; // mid - 1 !!
}
}
return lo;
}