题目描述
统计一个数字在排序数组中出现的次数。
时间限制:1秒
空间限制:32768K
热度指数:71223
算法
假设我们要知道这个数字的次数,那么我们直接搜索 k+0.5 和 k-0.5的位置,直接相减就可以了。
参考代码
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
return biSearch(data, k+0.5) - biSearch(data, k-0.5);
}
private:
int biSearch(const vector<int> &data, double num) {
int s = 0, e = data.size() - 1;
while (s <= e) {
int mid = (e - s) / 2 + s;
if (data[mid] < num)
s = mid + 1;
else if (data[mid] > num)
e = mid - 1;
}
return s;
}
};
下面这个是直接一行代码实现的,用到了count()函数,我觉得这个如果面试,肯定不会让你过的。
参考代码
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
return count(data.begin(), data.end(), k);
}
};