输入一个已经排好序的算法,和一个目标数值,使用二叉搜索的方法确定这个target number在这个数组中的哪个位置,这个位置是这个数对应的下标值。
样例输入:
[0, 1, 21, 33, 45, 45, 61, 71, 72, 73]
33
样例输出:
3
Solution
test_array = [0, 1, 21, 33, 45, 45, 61, 71, 72, 73]
target_num = 33
def binarySearch(array, target):
# Write your code here.
return binary_search_help(array = array, target = target, left = 0,right=len(array)-1)
def binary_search_help(array, target, left, right):
print(f"left:{left}--right{right} ")
if left > right:
#考虑到边际情况,实际上左边不会比右边大,如果出现这种情况,就表示找不到
return -1
#先确定一个middle //是去掉小数部分取整
middle = (left+right)//2
#假定这个middle的位置可能是要找的数字
potential_Match = array[middle]
#如果这个数字是要找的数字,返回这个middle的下标
if target == potential_Match:
return middle
#由于这个数组是排好序的,如果目标小于中间值,向左搜索
elif target < potential_Match:
return binary_search_help(array,target,left,middle-1)
#如果目标值大于中间值,向右搜索
else:
return binary_search_help(array,target,middle+1,right)
# print(55.5//2)
print(binarySearch(array = test_array,target = target_num))
complexity
Time = O(log(n))
Space = O(log(n))