zoukankan      html  css  js  c++  java
  • 34.在排序数组中查找元素的第一个和最后一个位置 二分法

    本题解法照抄王尼玛的解答

     https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/duo-tu-yan-shi-34-zai-pai-xu-shu-zu-zhong-cha-zhao/

    思路:

      1. 当一道题出现了 排序数组+搜索 或者 排序数组+log(n)的时候,我们的第一反应肯定是二分法

    难点:

      1. 用 log(n) 找到target没问题 ,关键是如何用log(n)找到其他两个端点。

    关键操作:

      1. 在用循环找到了target之后,不要返回该下标,继续二分查找端点下标,直到找到

        1)边界  0 或  len(nums)-1

        2)  左端点左边 != target 或者  右端点右边 != target

        3)  一般二分法循环如下:

        l = 0

        r = len(nums)-1

        while l <= r : 

          mid = l + (r-l)//2

          if nums[ mid ] < target: 

            l = mid+1

          elif nums[ mid ] > target:

            r = mid -1 

          else:

            return mid 

    代码:

      

    class Solution:
        def searchRange(self, nums: List[int], target: int) -> List[int]:
            if not nums: return [-1,-1]
            def get_points(direction): 
                l = 0
                r = len(nums)-1
                while l<=r:
                    mid = l + (r-l)//2
                    if nums[mid]>target:
                        r = mid-1
                    elif nums[mid]<target:
                        l = mid+1
                    else:
                        if direction == 'left':
                            if mid>0 and nums[mid] == nums[mid-1]:
                                r = mid-1
                            else:
                                return mid

                        else:
                            if mid<len(nums)-1 and nums[mid] == nums[mid+1]:
                                l = mid+1
                            else:
                                return mid
                return -1
            return [get_points('left'),get_points('right')]
  • 相关阅读:
    平面切圆柱面的椭圆绘制
    抛物面倾斜体积积分
    计算误差函数的积分--erf(x)
    三棱椎的体积
    Mac平台上OpenCV开发环境搭建
    仿新浪右下角视频弹窗(视频弹出广告)播放器
    python爬虫之Scrapy 使用代理配置
    ip地址定位库
    python 使用 redis expire属性设置访问时间间隔
    如何做将两张图片合二为一
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12888037.html
Copyright © 2011-2022 走看看