Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int lower_bound(const vector<int > &nums, int target) { // first elem >= target
  4. int l = 0;
  5. int r = nums.size();
  6.  
  7. while (r - l > 1) {
  8. int mid = (l + r ) / 2;
  9. if (nums[mid] >= target) r = mid;
  10. else l = mid;
  11. }
  12.  
  13. if (nums[l] >= target) return l;
  14. if (nums[r] >= target) return r;
  15. return -1;
  16. }
  17. int upper_bound(const vector<int > &nums, int target) { // first elem > target
  18. int l = 0;
  19. int r = nums.size();
  20.  
  21. while (r - l > 1) {
  22. int mid = (l + r ) / 2;
  23. if (nums[mid] > target) r = mid;
  24. else l = mid;
  25. }
  26.  
  27. if (nums[l] >= target) return l;
  28. if (nums[r] >= target) return r;
  29. return -1;
  30. }
  31. vector<int> searchRange(vector<int>& nums, int target) {
  32. int lb = lower_bound(nums, target);
  33. int ub = upper_bound(nums, target);
  34.  
  35. if (lb == -1 || nums[lb] != target) return {-1, -1};
  36. if (ub == -1) {
  37. return {lb, (int)(nums.size() - 1) };
  38. } else {
  39. return {lb, ub};
  40. }
  41. }
  42. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement