我尝试编写一个peak_finder函数,在一维列表中搜索一个峰值。我在JavaScript中编写了相同的算法,它与我的Python算法相同的输入工作正常。但是,我的Python算法给了我一个list index out of range error.
这里是Python中算法的代码:
def peak_finder(arr):
mid = len(arr) / 2
if arr[mid] < arr[mid - 1]:
return peak_finder(arr[:mid])
elif arr[mid] < arr[mid + 1]:
return peak_finder(arr[mid:])
else:
return arr[mid]
我用来测试它的示例输入是:print(peak_finder([0, 1, 6, 5, 4, 3, 2]))
。
答案 0 :(得分:2)
您必须添加一些长度检查:
def peak_finder(arr):
if (len(arr) == 1):
return arr[mid]
elif (len(arr) == 2):
return max(arr[0], arr[1])
mid = len(arr) / 2
if arr[mid] < arr[mid - 1]:
return peak_finder(arr[:mid])
elif arr[mid] < arr[mid + 1]:
return peak_finder(arr[mid:])
else:
return arr[mid]
答案 1 :(得分:1)
别忘了检查数组长度
def peak_finder(arr):
if len(arr) == 1: # check
return arr[0]
if len(arr) == 2:
return max(arr[0], arr[1])
mid = len(arr) / 2
if arr[mid] < arr[mid - 1]:
return peak_finder(arr[:mid])
elif arr[mid] < arr[mid + 1]:
return peak_finder(arr[mid:])
else:
return arr[mid]