📅  最后修改于: 2023-12-03 15:06:36.006000             🧑  作者: Mango
在给定的数组中,如果满足条件 i < j < k 且 arr[i] < arr[j] > arr[k],则称 (i, j, k) 为一个“山峰”。本文将介绍如何在数组中找出所有的山峰。
遍历数组时,使用两个指针 i 和 j,分别指向相邻的数,同时记录是否找到了合法的山峰。具体地,当 j 移动到 i 右边时,需要满足以下条件:
若这两个条件都满足,我们就找到了一个合法的山峰。接着,我们不断移动 j,直到它不能再往后移动。此时,我们将 i 移动到 j 的位置,重复以上操作,直到数组末尾。
可以用如下代码来实现:
def find_peaks(arr):
if len(arr) < 3:
return []
res = []
i, j = 0, 1
while j < len(arr) - 1:
if arr[i] < arr[j] and arr[j] > arr[j+1]:
res.append((i, j, j+1))
j += 1
else:
i, j = j, j+1
return res