二分查找等于target、第一个小于等于target、第一个大于等于target的值

 1 class Solution {  2 public:  3     // 查找第一个小于等于target的值  4     int binarySearch1(vector<int> vec, int target) {  5         int left = 0;  6         int right = vec.size() - 1;  7         while (left <= right) {  8             int mid = left + (right - left) / 2;  9             if (vec[mid] > target) { // 目标值可能在区间[left, mid] 10                 right = mid - 1; 11             } else { // 目标值可能在区间[mid, right] 12                 left = mid + 1; 13             } 14         } 15         return right; 16     } 17     // 查找第一个大于等于target的值 18     int binarySearch2(vector<int> vec, int target) { 19         int left = 0; 20         int right = vec.size() - 1; 21         while (left <= right) { 22             int mid = left + (right - left) / 2; 23             if (vec[mid] < target) { // 目标值可能在区间[mid, right] 24                 left = mid + 1; 25             } else { // 目标值可能在区间[left mid] 26                 right = mid - 1; 27             } 28         } 29         return right; 30     } 31     // 查找等于target的值 32     int binarySearch3(vector<int> vec, int target) { 33         int left = 0; 34         int right = vec.size() - 1; 35         while (left <= right) { 36             int mid = left + (right - left) / 2; 37             if (vec[mid] == target) { 38                 return mid; 39             } else if (vec[mid] > target) { // 目标值可能在区间[left, mid] 40                 right = mid - 1; 41             } else { // 目标值可能在区间[mid, right] 42                 left = mid + 1; 43             } 44         } 45         return -1; 46     } 47 };