一个Python实现,有几个要点
- 避免使用reduce函数,使算法更易于理解
- 第一个和最后一个元素被视为峰值(这可能是一个要求,例如在面试中)
- 高原上的所有值都会被加起来
- 可以从高原开始或结束
def findPeaks(points: List[int]) -> List[int]:
peaks, peak = [], []
if points[0] >= points[1]:
peak.append(points[0])
for i in range(1, len(points)):
prv = points[i - 1]
cur = points[i]
if cur > prv:
peak = [cur]
elif cur == prv:
peak.append(cur)
elif cur < prv and len(peak):
peaks.extend(peak)
peak = []
if len(peak) and len(peak) != len(points):
peaks.extend(peak)
return peaks
if __name__ == "__main__":
print(findPeaks([1, 2, 3, 4, 5, 4, 3, 2, 1]))
print(findPeaks([1, 2, 1, 2, 1]))
print(findPeaks([8, 1, 1, 1, 1, 1, 9]))
print(findPeaks([1, 1, 1, 1, 1]))
print(findPeaks([1, 6, 6, 6, 1]))