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爬虫设置每个代理ip的简单方法

    python爬虫设置每个代理ip的简单方法

    在本篇文章里小编给大家整理了一篇关于python爬虫设置每个代理ip的简单方法,有兴趣的朋友们可以学习参考下。
    2021-08-08
  • 基于Python实现五子棋-(人机对战)

    基于Python实现五子棋-(人机对战)

    这篇文章主要为大家详细介绍了如何利用Python实现五子棋游戏(人机对战版),文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-05-05
  • Python如何生成xml文件

    Python如何生成xml文件

    在本篇文章里小编给大家分享的是一篇关于Python生成xml文件方法以及实例代码,需要的朋友们可以学习下。
    2020-06-06
  • Python实现Word表格转成Excel表格的示例代码

    Python实现Word表格转成Excel表格的示例代码

    这篇文章主要介绍了Python实现Word表格转成Excel表格的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python使用多线程不断刷新网页的方法

    python使用多线程不断刷新网页的方法

    这篇文章主要介绍了python使用多线程不断刷新网页的方法,涉及Python多线程thread及time模块操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python excel合并居中值相同的单元格实例代码

    Python excel合并居中值相同的单元格实例代码

    在工作中遇到了合并具有相同条件的单元格合并的问题,下面这篇文章主要给大家介绍了关于Python excel合并居中值相同单元格的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Python学习之MRO方法搜索顺序

    Python学习之MRO方法搜索顺序

    这篇文章主要介绍了Python MRO方法搜索顺序,文中代码和图片解释的非常详细,可以很好的带大家学习相关知识内容,感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09
  • python数据结构学习之实现线性表的顺序

    python数据结构学习之实现线性表的顺序

    这篇文章主要为大家详细介绍了python数据结构学习之实现线性表的顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 解决python字典对值(值为列表)赋值出现重复的问题

    解决python字典对值(值为列表)赋值出现重复的问题

    今天小编就为大家分享一篇解决python字典对值(值为列表)赋值出现重复的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python使用Pickle模块进行数据保存和读取的讲解

    Python使用Pickle模块进行数据保存和读取的讲解

    今天小编就为大家分享一篇关于Python使用Pickle模块进行数据保存和读取的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04

最新评论