📅  最后修改于: 2023-12-03 15:11:33.180000             🧑  作者: Mango
这是一个关于算法的测验,问题21来自SP2竞赛1,需要求解一个数组的最大峰值。
给定一个长度为N的数组A,最大峰值指数组中最大值的左右两边,两边的值都小于最大值。如果最大值在边界上,则只需要满足一边小于最大值即可。
例如,对于数组[5, 2, 1, 4, 6, 3],最大峰值为4。因为4左右两边的值分别是2和6,都小于4。
def max_peak(A):
"""
给定一个长度为N的数组A,求最大峰值。
Args:
A: 长度为N的整数数组
Returns:
最大峰值,若不存在则返回None
"""
# 找到最大值及其位置
max_val, max_idx = A[0], 0
for i in range(1, len(A)):
if A[i] > max_val:
max_val, max_idx = A[i], i
# 从左到右找第一个小于最大值的数
for i in range(max_idx):
if A[i] < max_val:
return max_val
# 从右到左找第一个小于最大值的数
for i in range(len(A)-1, max_idx, -1):
if A[i] < max_val:
return max_val
# 如果最大值在边界上,则存在最大峰值
return None
这道题简单粗暴,直接遍历一遍数组就能求解。同时,需要注意最大值在边界的情况。