intlower_bound(vector<int> arr, int target){ left = 0; right = arr.size() - 1; while (left <= right){ int mid = left + (right-left)>>1; if (arr[mid] < target) left = mid + 1; else: right = mid -1; } return left; }
classSolution { public: vector<int> searchRange(vector<int>& nums, int target){ int left = lower_bound(nums,target); if(nums.empty() || left == nums.size() || nums[left]!=target ){ //当left==len(nums)时,说明数组中没有>=target的数 return vector<int>{-1,-1}; } int right = lower_bound(nums,target+1)-1; return vector<int>{left,right};
} //返回>=target的第一个数 intlower_bound(vector<int>& nums,int target){ int start = 0; int end = nums.size() - 1; while (start <= end){ int mid = (end - start)/2 + start; if(nums[mid] < target){ start = mid + 1; }else{ end = mid -1; } } return start; } };