python二分法查找实例代码

 更新时间:2021年11月21日 16:11:52   作者:栾沫  
二分算法是一种效率比较高的查找算法,其输入的是一个有序的元素列表,如果查找元素包含在列表中,二分查找返回其位置,否则返回NONE,下面这篇文章主要给大家介绍了关于python二分法查找的相关资料,需要的朋友可以参考下

对于要搜索的元素越多,二分查找速度比简单查找快的更多 这是二分查找算法的优点,但二分算法也有缺点,二分算法只针对有序的列表,这样插入和删除就会很困难,因此,折半查找方法只适合不经常变动的有序列表

 二分查找有个很重要的特点,就是不会查找数列的全部元素,而查找的数据量其实正好符合元素的对数,正常情况下每次查找的元素都在一半一半地减少。所以二分查找的时间复杂度为 O(log2n) 是毫无疑问的。当然,最好的情况是只查找一次就能找到,但是在最坏和一般情况下的确要比顺序查找好了很多。

题目一:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
class Solution:
    def search(self,nums:List[int],target:int)->int:
        left=0
        right=len(nums)-1
        while(left<=right):
            mid=(left+right)//2
            if nums[mid]==target:
               return mid
            if nums[mid]<target:
                left=mid+1
            else:
                right=mid-1
        return -1
题目二:在一个严格递减的数组中,找到第二个比目标值target大的数的下标。若不存在,则返回-1。 
class Solution:
    def search(self,nums:List[int],target:int)->int:
        left=0
        right=len(nums)-1
        while(left<=right):
            mid=(left+right)//2
            if nums[mid]==target:
               return mid
            if nums[mid]>target:
                left=mid+1
            else:
                right=mid-1
        return -1
题目三:函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
class Solution:
     def twoSum(self, numbers: List[int], target: int) -> List[int]:
        for i in range(len(numbers)-1):
            left=i
            right=len(numbers) - 1
            while(left<=right):
                mid=(left+right)//2
                if numbers[mid]+numbers[i]==target:
                    return [i+1,mid+1]
                elif numbers[mid]+numbers[i]<target:
                    left=mid+1
                else:
                    right = mid-1
            return [-1,-1]

总结

到此这篇关于python二分法查找的文章就介绍到这了,更多相关python二分法查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python光学仿真实现光线追迹之空间关系

    python光学仿真实现光线追迹之空间关系

    这篇文章主要介绍了python光学仿真中实现光线追迹的空间关系示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 一文带你了解Python闭包的基本用法

    一文带你了解Python闭包的基本用法

    Python 是一种高级编程语言,拥有强大的功能和工具库。Python 的闭包是一个强大的编程概念,可以帮助程序员编写更加模块化、可重用的代码。本文将深入介绍 Python 的闭包,从概念、定义、实现、应用等多个角度详细阐述
    2023-03-03
  • python中字典按键或键值排序的实现代码

    python中字典按键或键值排序的实现代码

    这篇文章主要介绍了python中字典按键或键值排序的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Python3.5装饰器原理及应用实例详解

    Python3.5装饰器原理及应用实例详解

    这篇文章主要介绍了Python3.5装饰器原理及应用,结合具体实例形式详细分析了Python3.5装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-04-04
  • Python异常处理:try、except、else、finally的全面解析

    Python异常处理:try、except、else、finally的全面解析

    在Python中,异常是程序在运行时发生的错误,当Python解释器遇到一个它不能处理的错误时,它会抛出一个异常,异常处理的主要目的是在程序遇到错误时,提供一种方法来处理这些错误,而不是简单地让程序崩溃,本文介绍了Python异常处理:try、except、else、finally的全面解析
    2024-07-07
  • Python实现线性插值和三次样条插值的示例代码

    Python实现线性插值和三次样条插值的示例代码

    这篇文章主要介绍了Python实现线性插值和三次样条插值的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • python-xpath获取html文档的部分内容

    python-xpath获取html文档的部分内容

    这篇文章主要介绍了python-xpath获取html文档的部分内容,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法

    Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法

    这篇文章主要介绍了Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法,涉及Python数值运算及图形绘制相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Python3的介绍、安装和命令行的认识(推荐)

    Python3的介绍、安装和命令行的认识(推荐)

    Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。这篇文章主要介绍了Python3的介绍、安装和命令行的认识,需要的朋友可以参考下
    2018-10-10
  • Django JSONField的自动转换思路详解(django自定义模型字段)

    Django JSONField的自动转换思路详解(django自定义模型字段)

    如果想实现JSONField的自动转换,可以使用Django REST framework的JSONField,或者自定义一个字段类并覆盖from_db_value()和get_prep_value()方法来实现这个功能,这篇文章主要介绍了Django JSONField的自动转换(django自定义模型字段)问题,需要的朋友可以参考下
    2023-06-06

最新评论