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

题目

统计一个数字在排序数组中出现的次数,例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5],由于3出现了4次,所以输出4。

Python题解
def get_first_k(data, k, start, end):
    if start > end:
        return -1
    middle_idx = (start + end) / 2
    middle_val = data[middle_idx]
    if middle_val == k:
        if middle_idx == 0 or (middle_idx > 0 and data[middle_idx - 1] != k):
            return middle_idx
        else:
            end = middle_idx - 1
    elif middle_val > k:
        end = middle_idx - 1
    else:
        start = middle_idx + 1
    return get_first_k(data, k, start, end)


def get_last_k(data, k, start, end):
    if start > end:
        return -1
    middle_idx = (start + end) / 2
    middle_val = data[middle_idx]
    if middle_val == k:
        if middle_idx == len(data) - 1 or (middle_idx < len(data) - 1 and data[middle_idx + 1] != k):
            return middle_idx
        else:
            start = middle_idx + 1
    elif middle_val > k:
        end = middle_idx - 1
    else:
        start = middle_idx + 1
    return get_last_k(data, k, start, end)


def number_of_k(data, k):
    res = 0
    data_len = len(data)
    if data is not None and data_len > 0:
        first = get_first_k(data, k, 0, data_len - 1)
        last = get_last_k(data, k, 0, data_len - 1)
        if first > -1 and last > -1:
            res = last - first + 1
    return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值