给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数
输入
[1,2,3,3,3,3,4,5],3
输出
4
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;
}
};
一个简单的实现:
#include <stdio.h>
int countOfNum(int arr[],int k,int n) ;
int main(void){
int n = 8;
int arr[n];
int i=0;
int k;
printf("请输入%d个非负整数,升序排列:\n",n);
while(i<n){
scanf("%d",&arr[i]);
i++;
}
//清除输入缓存
while(getchar()!='\n')
continue;
printf("请输入要统计出现字数的数字:\n");
scanf("%d",&k);
printf("%d在数组中出现:%d次。",k,countOfNum(arr,k,n));
return 0;
}
int countOfNum(int arr[],int k,int n) {
int i ;
int count = 0;
for(i=0;i<n;i++){
if(arr[i]==k){
count++;
}
//因为是升序数组,当检测到k读入了一个以上,而后续数组不是k
//就可以判断k在后面数组位置没了,所以可以终止循环了。
if(arr[i]!=k&&count>0){
printf("a[%d]=%d,count=%d\n",i,arr[i],count);
break;
}
}
return count;
}