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')]
  • 相关阅读:
    java中获取服务器的IP和端口
    springboot项目 配置https
    vue+element+upload实现头像上传
    js指定日期时间加一天 ,判断指定时间是否为周末
    在内网中 vue项目添加ECharts图表插件
    vue+element树组件 实现树懒加载
    iview 表格随着更改刷新
    vue设置input不可编辑切换
    .Net程序员学用Oracle系列(3):数据库编程规范
    .Net程序员学用Oracle系列(2):准备测试环境
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12888037.html
Copyright © 2011-2022 走看看