二分查找,写起来比较流畅,唯一的小问题是mid在数组中对应的值等于target时,需要将r和l都置为mid,方便之后的操作,贴代码

 1 class Solution {
 2 public:
 3     vector<int> searchRange(vector<int>& nums, int target) 
 4     {
 5         vector<int> res = {-1,-1};
 6         if(!nums.size())
 7         return res;
 8         int r = 0;
 9         int l = nums.size()-1;
10         while(r<l)
11         {
12             int mid = (r+l)/2;
13             if(nums[mid]>target)
14             l = mid;
15             else if(nums[mid]<target)
16             r = mid+1;
17             else
18             {
19                 l = r = mid;
20             }
21         }
22         if(nums[r]!=target)
23         return res;
24         while(r > 0 && nums[r-1] == target)
25         {
26             r--;
27         }
28         while(l < nums.size()-1 && nums[l+1] == target)
29         {
30             l++;
31         }
32         res[0] = r;
33         res[1] = l;
34         return res;
35     }
36 };