基础版本

 1bool binarySearch(vector<int> &scores, int target)
 2{
 3    int l = 0, r = scores.size() - 1;
 4    while (l <= r) {
 5        int mid = l + (r - l) / 2;
 6
 7        if (scores[mid] == target) {
 8            return true;
 9        }
10
11        if (scores[mid] < target) {
12            l = mid + 1;
13        }
14        else {
15            r = mid - 1;
16        }
17    }
18    return false;
19}

lower_bound 和 upper_bound

 1// lower_bound: 返回第一个大于等于 target 的元素的迭代器
 2int lower_bound(vector<int> &scores, int target)
 3{
 4    int l = 0, r = scores.size() - 1;
 5    while (l <= r) {
 6        int mid = l + (r - l) / 2;
 7
 8        if (scores[mid] < target) {
 9            l = mid + 1;
10        }
11        else {
12            r = mid - 1;
13        }
14    }
15    return l; // 返回第一个大于等于 target 的位置
16}
17// upper_bound: 返回第一个大于 target 的元素的迭代器
 1class Solution {
 2public:
 3    int countTarget(vector<int> &scores, int target)
 4    {
 5        int lb = scores.size(), ub = scores.size();
 6
 7        int l = 0, r = scores.size() - 1;
 8        while (l <= r) {
 9            int mid = l + (r - l) / 2;
10
11            if (scores[mid] < target) {
12                l = mid + 1;
13            }
14            else {
15                lb = mid;
16                r = mid - 1;
17            }
18        }
19
20        l = 0, r = scores.size() - 1;
21        while (l <= r) {
22            int mid = l + (r - l) / 2;
23
24            if (scores[mid] <= target) {
25                l = mid + 1;
26            }
27            else {
28                ub = mid;
29                r = mid - 1;
30            }
31        }
32        return ub - lb;
33    }
34};