python力扣二分查找法

一、引言

二分法其实是在一串数字中查找需要的数字,我们将一串数字有按大小排序。用第一项位置加最后一项位置除以2,得到中位数,我们再将中位数和需要查找的数值的大小进行对比,再缩小一半的查询范围,重复以往可以最终锁定一个极小的范围。

二、列如:

将1到100进行规则的排序,找出一个随机的数值。这时我们可以遍历1到100,但是计算机的效率会大大增加。使用二分法,可以在一定范围内快速的寻找到数值的范围,并且来定位。

三、代码

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        shang,xia=0,len(nums)-1
        while shang<=xia:
            mid=(shang+xia)//2 #获取中位数
            if nums[mid]<target: #如果中位数小于查找值,则锁定后半段
                shang=mid+1
            elif target<nums[mid]: #如果中位数大于查找值,则锁定前半段
                xia=mid-1
            else:
                return mid
        return -1
四、解决思路

在给定了一串列表中,首先我们得判断是否是按照大小规则的排列,找出首位的下标和末位的下标相加除2,得到中位下标(可以得到中位数的值)。我们将中位数和需要求的数值进行大小的对比,舍弃对中位数的前一半查找,反之则舍弃对后一半范围查找,达成开方效果,同时在新的查找范围重新计算出中位数,重复循环得到范围。但求的值为整数,直接确定数值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值