intbinarySearch(vector<int> nums,int target){int left =0, right =...;while(...){// 有效的防止了mid的溢出int mid = left +(right - left)/2;if(nums[mid]== target){...}elseif(nums[mid]> target){
right =...}elseif(nums[mid]< target){
left =...}}return...}
2. 寻找一个数
int binarySearch (vector<int> nums,int target){int left =0;int right = nums.size()-1;// 搜索区间是 [left,right]while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target)return mid;elseif(nums[mid]> target)
rgiht = mid -1;elseif(nums[mid]< target)
left = mid +1;}return-1;}
3. 寻找左侧边界的二分搜索
// 每次循环的搜索区间是[left, right)int binarySearch (vector<int> nums,int target){if(nums.size()==0)return-1;int left =0;int right = nums.size();while(left < right){int mid = left +(right - left)/2;if(nums[mid]== target)
right = mid;elseif(nums[mid]> target)
rgiht = mid;elseif(nums[mid]< target)
left = mid +1;}return left;}
int binarySearch (vector<int> nums,int target){int left =0;int right = nums.size()-1;// 搜索区间为[left, right]while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target)// 收缩右侧边界
right = mid -1;elseif(nums[mid]> target)// 搜索区间变为[left, mid - 1]
rgiht = mid -1;elseif(nums[mid]< target)// 搜索区间变为[mid + 1, right]
left = mid +1;}// 检查出界情况if(left >= nums.size()|| nums[left]!= target)return-1;return left;}
4. 寻找右侧边界的二分搜索
// 每次循环的搜索区间是(left, right]int binarySearch (vector<int> nums,int target){if(nums.size()==0)return-1;int left =0;int right = nums.size();while(left < right){int mid = left +(right - left)/2;if(nums[mid]== target)
left = mid +1;elseif(nums[mid]> target)
rgiht = mid;elseif(nums[mid]< target)
left = mid +1;}return left -1;}
int binarySearch (vector<int> nums,int target){int left =0;int right = nums.size()-1;// 搜索区间为[left, right]while(left <= right){int mid = left +(right - left)/2;if(nums[mid]== target)// 收缩左侧边界
left = mid +1;elseif(nums[mid]> target)// 搜索区间变为[left, mid - 1]
rgiht = mid -1;elseif(nums[mid]< target)// 搜索区间变为[mid + 1, right]
left = mid +1;}// 检查出界情况if(right <0|| nums[right]!= target)return-1;return right;}