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 };