题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
方法一:哈希算法(没有运用升序的有序序列条件)
int table[101]={0};
void CreatHash(int* data,int dataLen){
for(int i=0;i<dataLen;i++){
table[data[i]]++;
}
}
int GetNumberOfK(int* data, int dataLen, int k ) {
//排空
if(data==NULL)return 0;
CreatHash(data,dataLen);
for(int i=0;i<dataLen;i++){
if(data[i]==k)return table[k];
}
return 0;
}
方法二:二分查找
``` c
int GetNumberOfK(int* data, int dataLen, int k ) {
//排空
if(data==NULL)return 0;
int i=0,j=dataLen-1;
int left=i,right=j,m;
//第一次二分查找
while(i<=j){
m=(i+j)/2;
if(k>=data[m])
i=m+1;
else
j=m-1;
}
right=i;//right为第一个大于k的元素下标
i=0;
j=dataLen-1;
//第二次二分查找
while(i<=j){
m=(i+j)/2;
if(k>data[m])
i=m+1;
else
j=m-1;
}
left=j;//left为k的前一个元素下标
return right-left-1;