python - 递归二分搜索函数,它接收并找到一个键数组(而不是单个键)
问题描述
我需要让我的二进制搜索功能搜索多个键,而不仅仅是我目前拥有的一个。如果找到键返回键的索引,否则返回-1
。
例子:
array = [ 1, 3, 5, 8, 10]
keys = [ 0, 2, 8, 5]
answer = [ -1, -1, 3, 2]
帮助将不胜感激!
def biSearch(A, low, high, key):
mid = (high + low) // 2
if low >= high:
return mid
elif A[mid] >= key: # we are in the left half of the array
index = biSearch(A, low, mid, key)
return index
else: # we are in the right half of array
index = biSearch(A, mid + 1 , high, key)
return index
def search(A, key):
low = 0
high = len(A)
index = biSearch(A, low, high, key)
return index
解决方案
你可以试试这个。我binary_search
这样写,如果找到它返回它返回的关键元素的索引-1
。
def binary_search(a,key,low,high):
if high >=low:
mid=low +(high-low)//2
if key == a[mid]:
return mid
elif key < a[mid]:
return binary_search(a,key,low,mid-1)
else:
return binary_search(a,key,mid+1,high)
else :
return -1
a= [ 1, 3, 5, 8, 10]
Keys=[0, 2, 8, 5]
out=[binary_search(a,idx,0,len(a)-1) for idx in Keys]
print(out)
输出
[-1, -1, 3, 2]
推荐阅读
- interface - USB真机接口在android studio 3.1中不显示
- c# - 如何将多个图像上传到数据库中以获得相同的 ID 并显示到 gridview 中?
- javascript - 为什么在线缩小器会更改我的代码?
- android - Android studio 3.1.4 工具栏卡在角落里
- html - 为什么我的新 div 会影响它之前的 div?
- mysql - 每次将新数据添加到数据库时如何从 1 增加 Id 列
- azure - 如何在 Azure 数据工厂的 Lookup 活动中只读取几行数据
- asynchronous - 如何为异步 WinHttpWebSocketSend 调用设置上下文?
- cordova - 离子代码推送更新失败:无法在 preInstallFailure 获取包起始页
- javascript - Javascript 正则表达式 UTF-8