二分查找等于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 };

相关