Peak Finder功能崩溃

时间:2017-10-10 19:48:36

标签: python

我尝试编写一个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]))

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]