查找数组中的峰值

时间:2016-01-29 21:12:51

标签: python

我对Python完全陌生,因此问题就在于此。 我试图解决一个标准的面试问题,即在阵列中找到一个高峰 峰值被定义为大于它的左右邻居的数字。我试图找到最大的峰值。

这是我的代码

#!/usr/bin/python3

def main():
    arr = [7, 12, 13, 8, 2, 16, 24, 11, 5, 1]
    num = find_peak(arr)
    print(num)

def find_peak(arr):
    return find_peak(arr, 0, len(arr))

def find_peak(arr, start, stop):

    mid = (start + stop)/2

    if(arr[mid] > arr[mid-1] and arr[mid] > arr[mid+1]):
        return arr[mid]
    elif (arr[mid] < arr[mid -1]):
        find_peak(arr, 0, mid-1)
    elif (arr[mid] < arr[mid+1]):
        find_peak(arr, mid+1, stop)

if __name__ == '__main__':
    main()

这是我得到的错误

Traceback (most recent call last):
  File "peak.py", line 23, in <module>
    main()
  File "peak.py", line 5, in main
    num = find_peak(arr)
TypeError: find_peak() missing 2 required positional arguments: 'start' and 'stop'

任何帮助表示赞赏

4 个答案:

答案 0 :(得分:4)

你有find_peak的两个函数定义,一个有一个参数arr,另一个有三个参数arrstartstop 。第二个覆盖了第一个。

为两个不同的功能使用两个不同的名称

答案 1 :(得分:0)

你这是在说:

num = find_peak(arr)

但是find_peak有3个参数,正如错误所述。你只提供了一个。

与C ++或其他语言不同,您不能使用具有不同参数的同名函数(也称为函数重载)。但是,您可以在函数声明中定义可选参数。

答案 2 :(得分:0)

def main():
    arr = [7, 12, 13, 8, 2, 16, 24, 11, 5, 1]
    num = find_peak(arr)
    print(num)

def find_peak(arr):
    return find_peaks(arr, 0, len(arr))

def find_peaks(arr, start, stop):

    mid = (start + stop)/2

    if(arr[mid] > arr[mid-1] and arr[mid] > arr[mid+1]):
        return arr[mid]
    elif (arr[mid] < arr[mid -1]):
        find_peaks(arr, 0, mid-1)
    elif (arr[mid] < arr[mid+1]):
        find_peaks(arr, mid+1, stop)

    if __name__ == '__main__':
       main()

答案 3 :(得分:0)

Python中不允许重载,我的建议是使用默认值而不是两个函数

$.ajax({
        type: "POST",
        url: URL_one,
        data: submitData
}).then(function (response) {
       console.log("Ajax response", response);
   });