028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

LeetCode中如何在排序数组中查找数字

小编给大家分享一下LeetCode中如何在排序数组中查找数字,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

创新互联是专业的网站建设公司,提供网站建设,网站制作,网站设计等网站开发一体化解决方案;包括html5,成都小程序开发,网站定制,企业网站建设,购物商城网站建设,成都响应式网站建设公司,建网站,PHP网站建设,软件开发,软文营销,网站营销。欢迎做网站的企业前来合作洽谈,创新互联将竭诚为您服务!

题目描述

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

           

题目样例

           

示例

           

题目思考

  1. 可以用小于 O(N)的时间复杂度得出结果吗?
  2. 可以做到 O(1) 空间复杂度吗?
           

解决方案

           
思路
           
复杂度
           
代码
class Solution:
    def search(self, nums: List[int], target: int) -> int:
        def binarySearch(isleft):
            # 传入flag isleft, 标记当前是查找左边界还是右边界
            s, e = 0, len(nums) - 1
            # 初始化结果为None
            res = None
            while s <= e:
                m = (s + e) >> 1
                if nums[m] == target:
                    if isleft:
                        # 当前查找的是左边界, 更新结果为等于target的更小的下标, 同时向左继续查找
                        res = m if res is None else min(res, m)
                        e = m - 1
                    else:
                        # 当前查找的是右边界, 更新结果为等于target的更大的下标, 同时向右继续查找
                        res = m if res is None else max(res, m)
                        s = m + 1
                elif nums[m] < target:
                    s = m + 1
                else:
                    e = m - 1
            return res

        left = binarySearch(True)
        if left is None:
            # 如果左边界不存在, 则说明整个数组没有target, 直接返回0
            return 0
        right = binarySearch(False)
        # 最终结果就是右边界-左边界+1
        return right - left + 1

看完了这篇文章,相信你对“LeetCode中如何在排序数组中查找数字”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


名称栏目:LeetCode中如何在排序数组中查找数字
网页URL:http://www.tsicrk.com/article/ispgsi.html

其他资讯

让你的专属顾问为你服务

1.6137s