【剑指Offer】 37.数字在排序数组中出现的次数 python实现

本文介绍了一种利用二分查找算法统计排序数组中特定数字出现频率的方法。通过寻找目标值k-0.5和k+0.5的插入位置,巧妙地计算出k在数组中的出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

统计一个数字在排序数组中出现的次数。

用例

输入输出
[1,2,3,3,3,3,4,5],34

解题思路

看见有序,肯定就是二分查找了,算法比较简单,不多说,值得一提的是,不要拘泥于递归,要会循环写法。

Python 代码

# 因为data中都是整数,所以可以稍微变一下,不是搜索k的两个位置,而是搜索k-0.5和k+0.5
# 这两个数应该插入的位置,然后相减即可。
# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        return self.biSearch(data, k+0.5) - self.biSearch(data, k-0.5)
    def biSearch(self,data,num):
        left = 0
        right = len(data)-1
        while left <= right:
            mid = (left+right)//2
            if data[mid] == num:
                return mid
            elif num < data[mid]:
                right = mid - 1
            elif num > data[mid]:
                left = mid + 1
        return left

s = Solution()
result = s.GetNumberOfK([1,2,3,3,3,3,4,5],3)
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值