给你一个下标从 0 开始的数组 mountain
。你的任务是找出数组 mountain
中的所有 峰值。
以数组形式返回给定数组中 峰值 的下标,顺序不限 。
注意:
- 峰值 是指一个严格大于其相邻元素的元素。
- 数组的第一个和最后一个元素 不 是峰值。
示例 1:
输入:mountain = [2,4,4] 输出:[] 解释:mountain[0] 和 mountain[2] 不可能是峰值,因为它们是数组的第一个和最后一个元素。 mountain[1] 也不可能是峰值,因为它不严格大于 mountain[2] 。 因此,答案为 [] 。
示例 2:
输入:mountain = [1,4,3,8,5] 输出:[1,3] 解释:mountain[0] 和 mountain[4] 不可能是峰值,因为它们是数组的第一个和最后一个元素。 mountain[2] 也不可能是峰值,因为它不严格大于 mountain[3] 和 mountain[1] 。 但是 mountain[1] 和 mountain[3] 严格大于它们的相邻元素。 因此,答案是 [1,3] 。
提示:
3 <= mountain.length <= 100
1 <= mountain[i] <= 100
class Solution:
def findPeaks(self, mountain: List[int]) -> List[int]:
return [i for i in range(1,len(mountain)-1) if mountain[i-1] < mountain[i] >mountain[i+1]]
定义了一个类
Solution
,其中包含一个方法findPeaks
,其作用是找到输入列表mountain
中的所有山峰(即比相邻元素大的元素)。让我们逐步解释代码的各个部分:
class Solution:
:定义了一个类Solution
,通常在LeetCode等竞赛平台上使用这种方式来组织代码。
def findPeaks(self, mountain: List[int]) -> List[int]:
:定义了一个方法findPeaks
,它接受一个参数mountain
,这个参数是一个整数列表,表示一个山脉数组。
self
:表示这是一个类的实例方法,需要通过类的实例来调用。mountain: List[int]
:指定mountain
参数的类型为整数列表,即输入应该是一个由整数组成的列表。-> List[int]
:指定了方法的返回类型为整数列表,即返回一个包含整数的列表。
return [i for i in range(1,len(mountain)-1) if mountain[i-1] < mountain[i] >mountain[i+1]]
:
range(1, len(mountain)-1)
:生成一个从索引 1 到len(mountain)-2
的范围,这是为了避免索引越界,因为在判断山峰时需要访问mountain[i-1]
和mountain[i+1]
。[i for i in range(1, len(mountain)-1) if mountain[i-1] < mountain[i] > mountain[i+1]]
:
- 这是一个列表推导式,遍历
range
返回的索引列表。if mountain[i-1] < mountain[i] > mountain[i+1]
:条件部分,判断当前元素mountain[i]
是否大于其前一个元素mountain[i-1]
和后一个元素mountain[i+1]
,这样的元素即为山峰。- 结果是一个包含所有满足条件的索引
i
的列表。
from typing import List
class Solution:
def findPeaks(self, mountain: List[int]) -> List[int]:
peak_indexes = []
n = len(mountain)
# Check each element from the second to the second last
for i in range(1, n - 1):
if mountain[i] > mountain[i - 1] and mountain[i] > mountain[i + 1]:
peak_indexes.append(i)
return peak_indexes