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

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

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

//二分法查找
int GetNumberOfK(int* data, int dataLen, int k )
{
    int i=0;
    int count = 0;//记录k所出现的次数
    int left = 0;//数组最左边的数
    int ret = 0;//保护mid
    int right = dataLen-1;//数组最右边的数
    int mid = dataLen / 2;//中间数
    if(k==0)
    {
        return count;
    }
    while(left<right)
    {
        if(data[mid]<k)
        {
            left = mid;
            mid = (left + right) / 2;
        }
        if(data[mid]>k)
        {
            right = mid;
            mid = (left + right) / 2;
        }
        left++;
        right--;
    }
    if(data[mid] == k)
        {
            count++;
            ret = mid;
            while(data[mid-1] == k)
            {
                count++;
                mid--;
            }
            mid = ret;
            while(data[mid+1] == k)
            {
                count++;
                mid++;
            }
        }
    printf("%d",count);
    return count;
}

全部评论

相关推荐

one_t:硕还是本?什么岗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务