题解 | #数字在升序数组中出现的次数#

数字在升序数组中出现的次数

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;
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务