Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int lower_bound(const vector<int > &nums, int target) { // first elem >= target
- int l = 0;
- int r = nums.size();
- while (r - l > 1) {
- int mid = (l + r ) / 2;
- if (nums[mid] >= target) r = mid;
- else l = mid;
- }
- if (nums[l] >= target) return l;
- if (nums[r] >= target) return r;
- return -1;
- }
- int upper_bound(const vector<int > &nums, int target) { // first elem > target
- int l = 0;
- int r = nums.size();
- while (r - l > 1) {
- int mid = (l + r ) / 2;
- if (nums[mid] > target) r = mid;
- else l = mid;
- }
- if (nums[l] >= target) return l;
- if (nums[r] >= target) return r;
- return -1;
- }
- vector<int> searchRange(vector<int>& nums, int target) {
- int lb = lower_bound(nums, target);
- int ub = upper_bound(nums, target);
- if (lb == -1 || nums[lb] != target) return {-1, -1};
- if (ub == -1) {
- return {lb, (int)(nums.size() - 1) };
- } else {
- return {lb, ub};
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement