二分法总结

findN

#寻找某个数在递增序列里, 找不到返回-1
def findN(nums,n):
    i = 0
    j = len(nums) - 1
    while i<=j:
        middle = i + (j - i)//2
        if nums[middle]==n:
            #return True
            return middle
        if nums[middle]>n:
            j = middle - 1
        else:
            i = middle + 1
    return -1 # False

findL

#寻找右序列的左边界,即大于等于它的所有元素,最靠左的
def findL(nums,n):
    i = 0
    j = len(nums) - 1
    temp = j+1 # 如果有右序列为空,则返回最大下标+1 【如果左序列为空,则返回最小下标 初始化temp = 0】
    while i<=j:
        middle = i + (j - i)//2
        if nums[middle]>=n: #找哪个序列的边界值,则判断条件为该序列的性质
            temp = middle
            j = middle - 1
        else:
            i = middle + 1
    return temp # False

findR

#寻找左序列的右边界,即小于等于它的所有元素,最靠右的
def findR(nums,n):
    i = 0
    j = len(nums) - 1
    temp = -1 # 如果有右序列为空,则返回最大下标+1 【如果左序列为空,则返回最小下标 初始化temp = 0】
    while i<=j:
        middle = i + (j - i)//2
        if nums[middle]<=n: #找哪个序列的边界值,则判断条件为该序列的性质
            temp = middle
            i = middle + 1
        else:
            j = middle - 1
    return temp # False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值