intsearch(vector<int>& nums,int target){int n = nums.size();int l =0;int r = n -1;while(l <= r){int mid = l +(r - l)/2;if(nums[mid]== target){return mid;}elseif(nums[mid]> target){
r = mid -1;}else{
l = mid +1;}}return-1;}
二分查找左边界
intleft_bound(vector<int>& nums,int target){int n = nums.size();int l =0;int r = n -1;while(l <= r){int mid = l +(r - l)/2;if(nums[mid]== target){
r = mid -1;}elseif(nums[mid]> target){
r = mid -1;}else{
l = mid +1;}}// 如果搜索的数字比所有的都大,最终right位置在最后一个元素,left = right+1// 如果搜索的数字比所有的都小,最终left 在0 。所以如果left>=nums.length || nums[left]!=target则未找到if(l >= n || nums[l]!= target)return-1;return l;}
二分查找右边界
intright_bound(vector<int>& nums,int target){int n = nums.size();int l =0;int r = n -1;while(l <= r){int mid = l +(r - l)/2;if(nums[mid]== target){
l = mid +1;}elseif(nums[mid]> target){
r = mid -1;}else{
l = mid +1;}}// 如果搜索的数字比所有的都大,最终right位置在最后一个元素,left = right+1// 如果搜索的数字比所有的都小,最终l在0,r = l - 1。所以如果r < 0 || nums[r] != target则未找到if(r <0|| nums[r]!= target)return-1;return r;}