评分及理由
(1)得分及理由(满分4分)
学生答案的基本设计思想是:先正序遍历找到所有峰,并用数组记录每个位置之前的最大峰值;然后倒序遍历找到谷,并计算峰值与谷值的差值。但该思路存在逻辑问题:记录的是每个位置之前的最大峰值,但峰必须在谷之前(i < j),而倒序遍历时,用当前位置之前的最大峰值减去当前谷值,可能违反峰在谷之前的条件(因为最大峰值可能出现在当前谷之后)。标准答案采用预处理每个位置之后的最小谷值,确保峰在谷之前。因此,该设计思想有缺陷,但部分正确(如遍历识别峰和谷)。扣2分,得2分。
(2)得分及理由(满分7分)
代码实现中:
- 数组h[n]未初始化(h[0]未定义),且逻辑错误:正序遍历时,对于非峰位置直接继承前值(h[i] = h[i-1]),但h[0]未初始化会导致错误。
- 变量f用于记录第一个峰的位置,但初始化f=0,判断if(f!=0) f=i; 实际上f始终不为0(初始0),因此f不会被更新,始终为0,导致后续循环条件i>=f可能出错(f=0时,倒序遍历从n-2...