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

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

http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2

C语言求数字在升序数组中出现的次数

  1. 思路:思路简单 时间复杂度要求log2n,使用二分查找法找到数字k的位置 然后从这个位置左右遍历计算总数即可。
 * 
 * @param data int整型一维数组 
 * @param dataLen int data数组长度
 * @param k int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int GetNumberOfK(int* data, int dataLen, int k ) {
    // write code here
    if(k>data[dataLen-1]||k<data[0]||dataLen==0)
        return 0;
    int head=0,tail=dataLen-1,mid=0;
    int num=0,i=0,j=0;
    while(tail-head>1){
        mid=(tail-head)/2+head;
        if(data[mid]<k){
            head=mid;
        }
        else{
            tail=mid;
        }
    }
    if(data[head]!=k&&data[tail]!=k)
        return 0;
    else if(data[head]==k)
        i=head;
    else  if(data[tail]==k)
        i=tail;
    while(data[i+j]==k){
        num++;
        j++;
    }
    j=0;
    while(data[i-1-j]==k)
    {
        num++;
        j++;
    }
    return num;
}
全部评论

相关推荐

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