二分查找相关题目

1. LeetCode 34. Find First and Last Position of Element in Sorted Array

 1 class Solution {
 2 public:
 3     vector<int> searchRange(vector<int>& nums, int target) {
 4         vector<int> ans = {-1, -1};
 5         if(nums.size() == 0) return ans;
 6         int l=0, r=nums.size();
 7         // 找到最左边的元素
 8         while(l < r){
 9             int mid = l + (r - l) /2;
10             if(nums[mid] >= target)
11                 r = mid;
12             else
13                 l = mid + 1;
14         }
15         if(l==nums.size() || nums[l] != target)
16             return ans;
17     
18         ans[0] = l;
19         // 找最右边的元素
20         r = nums.size();
21         while(l < r){
22             int mid = l + (r - l) /2;
23             if(nums[mid] > target)
24                 r = mid;
25             else
26                  l = mid+1;
27             // 错误写法
28             //if(nums[mid] > target) r = mid - 1;
29             //else l = mid;     // 当l==mid, r保持不变时会死循环,
30         }
31         ans[1] = l-1;
32         return ans;
33     }
34 };

猜你喜欢

转载自www.cnblogs.com/sclczk/p/11162712.html