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

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

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

相关推荐

uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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