Leedcode 二分查找每日两练 Python

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

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

备战蓝桥杯 倒计时72天

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


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

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

image.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


image.png

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


image.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]


image.png

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


目录
相关文章
|
7月前
|
算法 Python
用 Python 实现堆排序。
用 Python 实现堆排序。
51 3
|
29天前
|
存储 搜索推荐 Python
用 Python 实现快速排序算法。
快速排序的平均时间复杂度为$O(nlogn)$,空间复杂度为$O(logn)$。它在大多数情况下表现良好,但在某些特殊情况下可能会退化为最坏情况,时间复杂度为$O(n^2)$。你可以根据实际需求对代码进行调整和修改,或者尝试使用其他优化策略来提高快速排序的性能
123 61
|
7月前
|
搜索推荐 Python
PYTHON的快速排序
PYTHON的快速排序
69 0
|
7月前
|
算法 Python
1010: 折半查找的实现(python)
1010: 折半查找的实现(python)
|
7月前
|
Python
【python】二分查找
【python】二分查找
36 0
|
Python
Python|关于基数排序(1)
Python|关于基数排序(1)
34 0
|
算法 搜索推荐 Python
Python|简单的快速排序
Python|简单的快速排序
128 0
|
算法 大数据 Python
Leedcode 二分查找每日两练 Python
Leedcode 二分查找每日两练 Python
82 0
Leedcode 二分查找每日两练 Python
|
算法 索引 Python
【Python 百炼成钢】二分法查找
【Python 百炼成钢】二分法查找
【Python 百炼成钢】二分法查找
|
存储 索引 Python