数字在排序数组中出现的次数(三十七)

题目描述:

统计一个数字在排序数组中出现的次数。

代码(已在牛客上 AC)

​lower_bound​​​ 求数组中第一个大于或等于 ​​k​​​ 的数, ​​upper_bound​​​ 求第一个大于 ​​k​​​ 的数, 那么 ​​(end - start)​​​ 就是数组中等于 ​​k​​ 的个数.

比如:

nums : 1 2 2 2 3 4
i : 0 1 2 3 4 5

如果 ​​k = 2​​​, 那么 ​​lower_bound​​​ 就是 ​​nums[1]​​​, 而 ​​upper_bound​​​ 就是 ​​nums[4]​​​, 那么总共有 ​​4 - 1 == 3​​​ 个元素 ​​2​​.

class Solution {
public:
// 数组排序当然用二分查找, 首先找到 k 的 lower_bound, 即第一个大于或等于 k 的数,
// 位置由 start 这个迭代器指定; 之后再查找 k 的 upper_bound, 即第一个大于 k 的数,
// 位置由 end 指向. 把两个迭代器之间的距离计算一下即可.
int GetNumberOfK(vector<int> data ,int k) {
auto start = std::lower_bound(data.begin(), data.end(), k);
vector<int>::iterator end = std::upper_bound(data.begin(), data.end(), k);
return (end - start);
}
};