classSolution{public:
vector<int>searchRange(vector<int>& nums,int target){
vector<int> ret{-1,-1};auto index =lower_bound(nums.begin(),nums.end(),target);if(index == nums.end()||*index != target)return ret;
ret[0]= index-nums.begin();
index =upper_bound(index,nums.end(),target);
ret[1]= index-nums.begin()-1;return ret;}};
代码实现(二刷自解 自定义lower upper bound C++ DAY 231)
classSolution{public:intmy_lower_bound(vector<int>& nums,int target){if(nums.empty())return-1;int l =0,r = nums.size()-1;while(l < r){int mid = l +((r - l)>>1);if(nums[mid]< target) l = mid +1;else r = mid;}return nums[l]== target ? l :-1;}intmy_upper_bound(vector<int>& nums,int target){if(nums.empty())return-1;int l =0,r = nums.size()-1;while(l < r){int mid = l +1+((r - l)>>1);if(nums[mid]> target) r = mid -1;else l = mid;}return nums[l]== target ? l :-1;}
vector<int>searchRange(vector<int>& nums,int target){return{my_lower_bound(nums,target),my_upper_bound(nums,target)};}};
代码实现(三刷自解 DAY 290 C++)
classSolution{public:intmy_lower_bound(vector<int>& nums,int target){int left =0, right = nums.size();while(left < right){int mid = left +((right - left)>>1);if(nums[mid]< target) left = mid +1;else right = mid;}return left;}intmy_upper_bound(vector<int>& nums,int target){int left =0, right = nums.size();while(left < right){int mid = left +((right - left)>>1);if(nums[mid]<= target) left = mid +1;else right = mid;}return left;}
vector<int>searchRange(vector<int>& nums,int target){
vector<int> ret{-1,-1};int startpos =my_lower_bound(nums, target);if(startpos == nums.size()|| nums[startpos]!= target){return ret;}
ret[0]= startpos;
ret[1]=my_upper_bound(nums, target)-1;return ret;}};
代码实现(四刷自解 DAY 8 Golang)
funcupperbound(nums []int, target int)int{
left, right :=0,len(nums)for left < right {
mid :=((right - left)>>1)+ left
if nums[mid]<= target {
left = mid +1}else{
right = mid
}}return left
}funclowerbound(nums []int, target int)int{
left, right :=0,len(nums)for left < right {
mid :=((right - left)>>1)+ left
if nums[mid]< target {
left = mid +1}else{
right = mid
}}if left ==len(nums)|| nums[left]!= target {return-1}return left
}funcsearchRange(nums []int, target int)[]int{
left, right :=lowerbound(nums, target),upperbound(nums, target)if left ==-1{return[]int{-1,-1}}return[]int{left, right -1}}