Python中的左侧二分查找

1 投票
2 回答
3174 浏览
提问于 2025-04-17 21:14

比如说,如果输入是 [1,2,3,3,4,4,5],我想找数字 3,那么应该返回 2,因为索引 2 是数字 3 最左边出现的位置。

再比如,在 [1,1,1,1,1,1,1,1] 这个列表中,我查找数字 1,应该返回 0。

那么我们该如何写一个函数,来在二分查找中向回查找呢?

2 个回答

0

这个函数会返回元素最左边的位置索引,如果找不到这个元素,就返回-1。

def left_binary_search(arr, value):
    low = 0
    high = len(arr) - 1
    index = -1

    while (low <= high):

        mid = (low + high) // 2

        if arr[mid] == value:
            index = mid
            high = mid - 1
        elif arr[mid] < value:
            low = mid + 1
        else:
            high = mid - 1

    return index
0

你可以用这段代码来找到左二叉搜索树中最左边的元素

def left_binary_search(input, value):
    try:
        if (type(input).__name__ != 'list') or (type(value).__name__ != 'int'):
            raise TypeError

    low = 0
    high = len(input) - 1
    check = (low + high) // 2
    q = False
    l1 = []
    while low <= high:
        mid = (low + high) // 2
        if input[mid] > value:
            high = mid - 1
        elif input[mid] < value:
            low = mid + 1
        else:
            if mid > check:
                return -1
            else:
                q = True
                l1.append(mid)
                high = mid
                if low == high:
                    return min(l1)
    if q == False:
        return -1
    return min(l1)
except TypeError:
    print("invalid type")

撰写回答