Leedcode 二分查找每日两练 Python

简介: Leedcode 二分查找每日两练 Python

大一在读 大数据管理与应用专业 欢迎交流

备战蓝桥杯 倒计时72天

目前主要学习Python算法与数据结构 今日主题:二分查找  

 

2c2b877fb2d34d8aafeaf3f7f155f27b.png

在这套流程里 l+1最终等于r 避免以往很多临界左移右移加一减一的讨论情况 并且mid(图片里的m)的范围处在[1,n-1] 真的很棒!

例一:nums为无重复的升序序列


cc8bf58071a54da7b0e4216365bc77d0.png

问题分析 :划分红蓝区域  红区<=target 蓝区>target

若红区最后一个元素等于 target 返回下标 否则返回下标+1

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        l,r=-1,len(nums)
        while l+1<r:
            mid=(l+r)//2
            if nums[mid]>target:
                r=mid
            else:
                l=mid
        return l if nums[l]==target else l+1

3d7d804e6b5d49e88fe68af95165aba1.png

例二:nums是一个非递减数组(前一篇博客出了下面这道的index解法[不建议使用]没有思考尽管 通过效率很高但还是不建议用这种手段做题)

a8a34ec993eb4d2d8bc4971cc658abb8.png

问题分析:1:找到第一个等于target的数字 划分红蓝区域


红区小于target 蓝区>=target 如果蓝区的第一个元素不等于target(前提是该元素下标可访问) 说明不存在 直接返回[-1,-1]


如果蓝区的第一个元素下标不可访问等价于 l+1>len(nums)-1 返回[-1,-1]


否则返回蓝区的第一个下标X1


2:找到最后一个等于target的数字 划分红蓝区域


红区小于等于target 蓝区大于target  

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        l,r=-1,len(nums)
        while l+1<r:
            mid=(l+r)//2
            if nums[mid]>=target:
                r=mid
            else:
                l=mid#红区记录<target
        if l==len(nums)-1:return [-1,-1]#如果不成立 l+1就是其中一个答案
        if nums[l+1]!=target:return [-1,-1]
        l1,r1=l,len(nums)
        while l1+1<r1:
            mid=(l1+r1)//2
            if nums[mid]>target:
                r1=mid
            else:
                l1=mid#红区记录<=target
        return [l+1,l1]

667ceb9ebe6740d5bfa9e213fa060ac6.png

我是小郑 期待与你一起奔赴山海!蓝桥杯加油!

相关文章
|
7月前
|
算法 索引 Python
Python中如何实现二分查找?请提供代码示例。
Python中如何实现二分查找?请提供代码示例。
76 0
|
1月前
|
Python
二分查找变种大赏!Python 中那些让你效率翻倍的搜索绝技!
二分查找是一种高效的搜索算法,适用于有序数组。其基本原理是通过不断比较中间元素来缩小搜索范围,从而快速找到目标值。常见的变种包括查找第一个等于目标值的元素、最后一个等于目标值的元素、第一个大于等于目标值的元素等。这些变种在实际应用中能够显著提高搜索效率,适用于各种复杂场景。
39 9
|
1月前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
本文介绍了二分查找及其几种Python实现的变种策略,包括经典二分查找、查找第一个等于给定值的元素、查找最后一个等于给定值的元素以及旋转有序数组的搜索。通过调整搜索条件和边界处理,这些变种策略能够适应更复杂的搜索场景,提升搜索效率和应用灵活性。
36 5
|
5月前
|
算法 数据挖掘 数据处理
搜索新境界:Python二分查找变种实战,精准定位数据不是梦!
【7月更文挑战第13天】二分查找算法以O(log n)效率在有序数组中查找数据。基础算法通过不断分割数组对比中间元素。Python实现变种包括:1) 查找目标值的第一个出现位置,找到后向左搜索;2) 查找目标值的最后一个出现位置,找到后向右搜索。这些变种在数据分析和索引构建等场景中极具价值,提升处理效率。
62 6
|
5月前
|
Python
二分查找变种大赏!Python 中那些让你效率翻倍的搜索绝技!
【7月更文挑战第12天】二分查找是高效搜索算法,适用于有序数组。基础原理是对比中间元素,按目标值大小在左右两侧递归查找。
42 4
|
4月前
|
Python
【Leetcode刷题Python】704. 二分查找
解决LeetCode "二分查找" 问题的Python实现代码。
20 0
|
4月前
|
算法 索引 Python
【Leetcode刷题Python】34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
解决LeetCode "在排序数组中查找元素的第一个和最后一个位置" 问题的方法。第一种方法是使用两次二分查找,首先找到目标值的最左边界,然后找到最右边界。第二种方法是利用Python的list.index()方法,先正序找到起始位置,再逆序找到结束位置,并给出了两种方法的Python实现代码。
64 0
|
5月前
|
算法 数据处理 开发者
超越传统:Python二分查找的变种策略,让搜索效率再上新台阶!
【7月更文挑战第11天】二分查找算法在有序数组中以O(log n)效率搜索元素。本文扩展了这一概念,介绍了3种Python变种:1) 查找第一个匹配值的位置,2) 找到最后一个匹配值,3) 在旋转有序数组中搜索。通过调整边界条件,这些变种增强了二分查找的适用性。代码示例展示了如何实现这些策略,以优化不同场景下的搜索效率。
28 0
|
7月前
|
算法 开发者 索引
深入理解Python中的二分查找与bisect模块
深入理解Python中的二分查找与bisect模块
|
7月前
|
机器学习/深度学习 存储 算法
Python排序——二分查找
Python排序——二分查找
56 0