二分查找,写起来比较流畅,唯一的小问题是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 };