剑指offer:数字在排序数组中出现的次数

本文介绍了一种使用二分查找算法确定已排序数组中特定元素出现次数的方法。通过两次二分查找分别定位该元素的起始和结束位置,从而高效地计算出元素的总数量。

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

# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        # write code here
        low=0
        high=len(data)-1
        mid=(low+high)/2
        while low<=high:
            mid=(low+high)/2
            if data[mid]<k:
                low=mid+1
            else:
                high=mid-1
            #mid=(low+high)/2
        start=low
        low=0
        high=len(data)-1
        mid=(low+high)/2
        while low<=high:
            if data[mid]<=k:
                low=mid+1
            else:
                high=mid-1
            mid=(low+high)/2
        end=high
        
        return end-start+1

题目给出的是一个排序好的数组,k一定是连续的,考虑用二分搜索来找到k有多少。即找到k的开始位置和结束位置。注意二分查找的一些点,例如where判断条件是<=,low和high更新的时候要+1 -1来保证每次范围都在缩小。然后因为要找到开始和结束的位置,当data[mid]==k的时候不能返回,而要继续探索,当要找左边界的时候要接着认为想找的k在左边,右边同理。所以才有第一个循环中if data[mid]>=k: high=mid-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值