13.数字峰值
题目:
给你一个含有若干整数的列表,你的任务是编写一个函数,找出这个列表中所有的峰值。峰值定义为比其前后元素都大的元素。你需要返回所有峰值的索引。
函数签名:
def find_peaks(nums: List[int]) -> List[int]:
输入:
函数的输入是一个含有 n 个整数的列表(0 <= n <= 10^5),其中每个整数的范围为 -10^9 <= nums[i] <= 10^9。
输出:
函数需要返回一个列表,包含所有峰值元素的索引。如果没有峰值,就返回空列表。
示例:
输入:
find_peaks([1, 3, 7, 1, 2, 6, 0, 1])
输出:
[2, 5, 7]
在这个示例中,7、6和1都是峰值,它们在原列表中的索引分别为2、5和7。
注意:在列表的两端,只需要比较一侧的元素。例如在上述示例中,最后一个元素1是一个峰值,因为它比前一个元素0大。
from typing import List
def find_peaks(nums: List[int]) -> List[int]:
tops: List = []
if len(nums) == 1:
return [0]
else:
for i in range(len(nums)):
if i == 0 and nums[0] > nums[1]:
tops.append(i)
elif i == len(nums) - 1 and nums[-1] > nums[-2]:
tops.append(i)
elif nums[i] > nums[i - 1] and nums[i] > nums[i + 1]:
tops.append(i)
return tops
def test_find_peaks():
assert find_peaks([1, 2, 3, 5, 3, 2, 1]) == [3]
assert find_peaks([1, 3, 7, 1, 2, 6, 3, 0, 2]) == [2, 5, 8]
assert find_peaks([1, 2, 3, 4, 5]) == [4]
assert find_peaks([5, 4, 3, 2, 1]) == [0]
assert find_peaks([1]) == [0]
assert find_peaks([2, 2]) == []
assert find_peaks([]) == []