原文地址:牛客网
描述
给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
数据范围:0≤k≤100,数组中每个元素的值满足≤val≤100
要求:空间复杂度 O(1),时间复杂度 O(logn)
示例1
输入:
[1,2,3,3,3,3,4,5],3
返回值:
4
示例2
输入:
[1,3,4,5],6
返回值:
0
思路:
因为时间复杂度是O(logn),所以用二分查找。
代码:
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int i=0;
int j=data.size()-1;
int m;
while(i<=j)
{
m=(i+j)/2;
if(data[m]<k){
i=m+1;
}
else if(data[m]>=k){
j=m-1;
}
}
int l=j;
i=0;
j=data.size()-1;
while(i<=j){
m=(i+j)/2;
if(data[m]<=k)i=m+1;
else j=m-1;
}
int r=i;
if(r-l-1>0)return r-l-1;
else return 0;
}
};