剑指 Offer -- 数字在排序数组中出现的次数(三十七)
原创
©著作权归作者所有:来自51CTO博客作者珍妮的选择的原创作品,请联系作者获取转载授权,否则将追究法律责任
数字在排序数组中出现的次数(三十七)
题目描述:
统计一个数字在排序数组中出现的次数。
代码(已在牛客上 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);
}
};