LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I

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

最简单python语句,可能并不是出题人的意愿:

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        return nums.count(target)

当然这题用二分试试:
def two(num, target, flag),利用flag来对左右边界的限定条件进行区分,提高代码的利用率。思路就是用二分法
当num[mid]大于target值的时候,找到了右节点,最后下标减一就好了;
当num[mid]大于等于target值的时候,找到了左节点;
每次比较中间值,符合要求就把mid赋值给ans,通过ans记录下标的位置,全部循环完之后返回ans

最后通过left<=right判断是否存在,如果不存在,二分法的结果left肯定是大于right的。
存在输出right - left + 1,否则输出0

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        def two(num, target, flag):
            left, right, ans = 0, len(num) - 1, len(num)
            while left <= right:
                mid = int((left + right) / 2)
                if num[mid] > target or (flag and num[mid] >= target):
                    right = mid - 1
                    ans = mid
                else:
                    left = mid + 1
            return ans
        left = two(nums, target, True)
        right = two(nums, target, False) - 1
        if left <= right:
            return right - left + 1
        else:
            return 0

posted @   小Aer  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示