python 求数组峰值
时间: 2023-12-20 18:21:39 浏览: 39
可以使用二分查找算法来求数组的峰值。具体思路如下:
1. 定义左指针 `left` 和右指针 `right`,分别指向数组的第一个元素和最后一个元素。
2. 在 while 循环中,计算中间元素的下标 `mid`,如果中间元素比其前一个元素大,说明峰值在右半边,将左指针 `left` 移动到 `mid + 1` 的位置;如果中间元素比其后一个元素大,说明峰值在左半边,将右指针 `right` 移动到 `mid - 1` 的位置;如果中间元素既不比前一个元素大,也不比后一个元素大,说明中间元素就是峰值,直接返回。
3. 如果 while 循环结束后仍未找到峰值,说明数组中不存在峰值,返回 -1。
以下是代码实现:
```python
def find_peak(nums):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if mid == 0 or nums[mid] > nums[mid-1]:
if mid == len(nums) - 1 or nums[mid] > nums[mid+1]:
return mid
else:
left = mid + 1
else:
right = mid - 1
return -1
```
其中,`nums` 是待查找峰值的数组,函数返回峰值的下标,如果数组中不存在峰值,返回 -1。