python - 使用二进制搜索返回下一个最高值

标签 python algorithm binary-search

在我的二进制搜索中,如果找不到目标,我想返回下一个最高元素的索引。

例如 [1,2,3,4,5,7]如果我要搜索 6它应该返回 7 的位置.

我正在测试 aList = [2, 8, 17, 42, 79, 85]

当我搜索 3 时它起作用了, 18 , 或 80 .但是,当我搜索 9 时,它返回的索引比应有的索引低 1。 , 43 , 或 86 .

def recursiveBinarySearch(aList, first, last, target):

    if last - first + 1 <= 0:
        return False
    else:
        midpoint = first + (last - first) // 2
        if aList[midpoint] == target:
            return midpoint
        elif last - first + 1 == 1:
            return midpoint 
        else:
            if target < aList[midpoint]:
                return recursiveBinarySearch(aList, first, midpoint-1, target)
            else:
                return recursiveBinarySearch(aList, midpoint+1, last, target)

最佳答案

aList = [1,3,5,6,8,9,10,12,34,56,78,456, 777]
def recursiveBinarySearch(aList, target, index):
    #aList = sorted(aList)
    print(aList, index)
    if len(aList) <= 1:
        if index==0 and aList[0]==target:
            return index
        else:   
            return index+1

    else:
        midpoint = len(aList) // 2
#        print(midpoint)
        if aList[midpoint] == target:
            return aList.index(target)+index
        else:
            if target < aList[midpoint]:
                return recursiveBinarySearch(aList[:midpoint],target, index)
            else:
                return recursiveBinarySearch(aList[midpoint:],target, index+len(aList[:midpoint]))

print(recursiveBinarySearch(aList,3,0))

这应该有效:) 修复了搜索第一个数字时的错误。

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

相关文章:

python - 如何从浮雕对象中提取圆形文本

python - 无法获取正确的像素颜色图像python

java - 如何获取二进制表示的字符串的或运算结果?

algorithm - 为什么在未排序的数组中我更喜欢二进制搜索而不是线性搜索?

C 二分查找

python - 如何从图像阵列中制作彩色点阵列?

python - 中断 urllib.read

algorithm - 红黑树包含过多的黑色节点和过少的红色节点

algorithm - 这些情况下的 BFS 与 DFS?

algorithm - 给定一个已排序的数字数组,如何找到小于 x 的数字的大小