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

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


目录
相关文章
|
JSON JavaScript API
【开源打印组件】vue-plugin-hiprint初体验
本文介绍对vue-plugin-hiprint部分重要代码的解析,这是一个很好的开源插件,能够自己自定义打印模板,通过后端传来的数据进行渲染打印,官方也提供了许多的api供开发者使用。界面采用了antdesign。实现了免预览的直接打印。
4083 1
【开源打印组件】vue-plugin-hiprint初体验
|
7月前
|
人工智能 自然语言处理 算法
经典大模型提示词工程技术路线概述
本文概述几种经典提示词工程方法,总结关键信息,分析其优势和局限,并分享笔者的一点思考。
742 105
经典大模型提示词工程技术路线概述
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
《鸿蒙Next:让人工智能语音交互听懂每一种方言和口音》
鸿蒙Next系统通过丰富方言语音数据、优化语音识别模型、引入语音合成技术及用户反馈机制,大幅提升对不同方言和口音的识别能力。具体措施包括多渠道收集方言数据、建立动态数据库、采用深度学习算法、实现多任务学习与对抗训练、生成标准方言样本,并结合硬件如麦克风阵列技术优化语音输入质量。这些综合手段确保了语音交互的准确性和实时性,为用户提供更智能、便捷的服务。
690 16
|
Ubuntu 安全 Java
在Ubuntu 14.04上安装Apache Tomcat 8的方法
在Ubuntu 14.04上安装Apache Tomcat 8的方法
126 0
|
Web App开发 缓存 前端开发
|
前端开发 JavaScript Java
课程管理-添加课程信息前端完善(显示分类) | 学习笔记
简介:快速学习课程管理-添加课程信息前端完善(显示分类)
314 0
课程管理-添加课程信息前端完善(显示分类) | 学习笔记
|
存储 Linux Windows
3.1 Linux文件系统的层次结构
通过学习《Linux一切皆文件》一节我们知道,平时打交道的都是文件,那么,应该如何找到它们呢?很简单,在 Linux 操作系统中,所有的文件和目录都被组织成以一个根节点“/”开始的倒置的树状结构,如图 1 所示。
421 0
3.1 Linux文件系统的层次结构
|
Oracle 关系型数据库
Oracle常用函数整理
今天再给大家分享一下Oracle的常用函数。
Oracle常用函数整理
|
Web App开发 监控 PHP