zoukankan      html  css  js  c++  java
  • 如何写对二分查找的代码而不出错

    二分查找有几种写法?它们的区别是什么? - Jason Li的回答 - 知乎
    https://www.zhihu.com/question/36132386/answer/530313852

    上中位数:两个中位数中较大的那个。下中位数则是较小的那个。

    把二分搜索的实现分解为上界查找和下界查找两个函数

    def lower_bound(array, first, last, value): # 返回[first, last)内第一个不小于value的值的位置
        while first < last: # 搜索区间[first, last)不为空
            mid = first + (last - first) // 2  # 防溢出
            if array[mid] < value: first = mid + 1
            else: last = mid
        return first  # last也行,因为[first, last)为空的时候它们重合
    
    def upper_bound(array, first, last, value): # 返回[first, last)内第一个大于value的位置
        while first < last:
            mid = first + (last - first)//2
            if array[mid] <= value: first = mid + 1
            else: last = mid
        return first
    

    注意转换关系:

    求x>=value的最小位置:lower_bound(first, last, value)

    求x>value的最小位置:upper_bound(first, last, value)

    求x<=value的最大位置:upper_bound(first, last, value) - 1

  • 相关阅读:
    第二阶段团队站立会议06
    第二阶段团队站立会议05
    Spring
    JVM
    线程池
    java内存模型
    线程
    接口与抽象类
    动态绑定,多态,static
    同步异步,并发并行概念的理解
  • 原文地址:https://www.cnblogs.com/ZeroTensor/p/11111308.html
Copyright © 2011-2022 走看看