Python中的左侧二分查找
比如说,如果输入是 [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")