栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【学习笔记】python实现二分查找

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【学习笔记】python实现二分查找

算法思想:每次将待查找元素target与有序列表的中间元素nums[mid]相比较,若等于中间元素则返回中间元素的下标,若大于中间元素则在后半部分中查找,若小于中间元素则在前半部分中查找。若找不到则返回-1

二分查找又称折半查找,其只适用于在有序列表中查找。

时间复杂度O(logn),n为数组长度

空间复杂度O(1)

代码部分:

def search(self, nums: List[int], target: int) -> int:

        left, right = 0, len(nums)-1

        while(left <= right):

            mid = (right - left) // 2 + left

            if(target < nums[mid]):

                right = mid-1

            elif(target == nums[mid]):

                return mid

            else:

                left = mid+1

        return -1

这里解释一下为什么取中间值的时候用(right - left)//2 + left 而不是用(right + left)//2。

这两个式子是恒等式,但是计算机中两个int相加可能会溢出,利用先减再除 最后加 可以很大程度避免溢出问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号