python - 使用二进制搜索找到上限和下限值

标签 python algorithm

这里是二分查找的代码,不知道是不是没有匹配值,问题是上界应该定位在small还是small+1?下界应该位于 small 或 small-1,对吗?谢谢。

def binary_search(my_list, key):
    assert my_list == sorted(my_list)

    large = len(my_list) -1
    small = 0

    while (small <= large):
        mid = (small + large) // 2 )
        # print small, mid, large, " - ", my_list[mid], "~", key
        if my_list[mid] < key:
            small = mid + 1
        elif my_list[mid] > key:
            large = mid - 1
        else:
            return mid

    raise ValueError

最佳答案

@Paul 很接近,它应该返回 mid+1 作为上限值。这里没有引发异常,而是返回上下限值的 Python 代码:

value = my_list[mid]
lower = mid if value < key else mid-1
upper = mid if value > key else mid+1
return (lower, upper)

这里有一个更简单的答案:

return (small-1, small)

因为 small 在您查找时位于 key 的索引之上,所以下限是 small-1 并且上限是 small

关于python - 使用二进制搜索找到上限和下限值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33002335/

相关文章:

ruby - 生成对象数组重复排列的过滤子集(给定长度 k)

algorithm - 点在多段线的哪一侧

python - 我继承的类 MenuBar(tk.Menu) 不显示菜单栏

python - 在 python 中的子列表上使用 map 和 filter 函数

ruby - 给定n,在ruby中如何求出n为1、3、4之和的不同写法的个数?

python - 除了前面写在列表中的数字之外的随机数

php - 升级流程繁重的 PHP 和 MySQL 应用程序的语言建议

python - 用相应的工作日数字替换列表中的工作日字符串 ("MON"、 "TUE"等)

Python fcntl 未按预期锁定

algorithm - 网络流量流通