深耕专业教研,探索前沿技术
信息技术来源:浙江省新阵地教育联盟2026届第二次联考技术试题卷

第 14 题

答案与解析

第(1)小题

参考答案

3

波峰必须由连续上升转为连续下降;持平段会中断上升或下降,不能跨过持平段继续累计。对称比较的是两侧变化段的个数,不是数值增减的幅度。
从左到右,题给数组共有以下4个波峰:

波峰对应的数据 峰顶 上升段数 下降段数 是否对称
2,4,3 4 1 1 是
2,6,8,5 8 2 1 否
5,6,3 6 1 1 是
3,4,8,6,1 8 2 2 是

第一个波峰在4下降到第一个3后结束,随后的3→3是持平段;再后面的3→2不属于这个波峰。四个波峰中有3个满足上升段数与下降段数相同。

第(2)小题

参考答案
  1. cnt = 0

  2. a[i-1] < a[i] and a[i] > a[i+1]

  3. i - left == right - i

程序分析

def peaks(a):
    n = len(a)
    if n < 3: # 至少需要3个元素才能形成波峰
        return 0
    ①
    for i in range(1, n - 1):
        if ②:
            ...
    return cnt

主程序把数组a传给peaks。函数先取得数组长度n;不足3个元素时无法形成先升后降的波峰,直接返回0。其余情况下,i遍历1至n-2,保证当前元素左右都有相邻元素,空②决定哪些位置进入波峰的两侧查找。

left = i
while left > 0 and a[left - 1] < a[left]:
    left -= 1

left从当前位置i出发。只要左侧相邻元素更小,就将left左移;每次左移对应纳入一段朝峰顶上升的变化段。到达数组左端或遇到不再严格上升的相邻关系时停止,left定位这段连续上升过程的起点。

right = i
while right < n - 1 and a[right] > a[right + 1]:
    right += 1
if ③:
    cnt += 1

right也从i出发,在当前值大于右侧相邻值时右移,每次纳入一段下降段。停止后,right定位连续下降过程的终点。两侧查找都使用严格大小比较,遇到相等值即停止。随后只有满足空③时才将cnt加1,最终返回cnt,因此cnt用于累计符合要求的波峰个数。

填空分析

①

后文通过cnt += 1累计数量,遍历前尚未统计任何波峰,应初始化cnt = 0。初始化放在for循环之前,才能保留各轮的累计结果。

②

只有当前位置是严格峰顶,才需要向左右寻找波峰边界。峰顶左侧须为上升段,即a[i-1] < a[i];右侧须为下降段,即a[i] > a[i+1]。两者同时满足,填写a[i-1] < a[i] and a[i] > a[i+1],也可写成a[i-1] < a[i] > a[i+1]。

③

left到i共有i-left个相邻变化段,i到right共有right-i个相邻变化段。对称波峰要求这两个数量相同,因此填写i - left == right - i。这里比较的是段数,不能用两端与峰顶的数值差判断对称。