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

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

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

相关推荐

10-15 10:23
门头沟学院 Java
牛可乐的头像真牛:赶紧举报,这公司绝对是诈骗的,等你签约后工作一两个月后根据合同漏洞把你开除,并且要求你赔偿3w培训费,996是为了提前筛选心甘情愿签下合同容易受骗的群体,纯粹面向校招生精心设计的骗局
你见过哪些工贼行为
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务