文章

14

粉丝

0

获赞

0

访问

1.2k

头像
2025 年 6 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年8月18日 12:30
阅读数 37

1.从题干中不难发现,峰谷探测仅要求关注宽度为三的滑动窗口内的数据,换句话来说,只需要做n-2次对三元素的比较即可。

int minmaxhillvalley(int * arr,int len){
int minvalley = 0;
int maxhill=0;
if(len <=3){
//引用math.h,处理trivial的情况
if(len <=2){
return 0;
}else{
return max(arr[0],arr[1],arr[2])-min(arr[0],arr[1],arr[2]);
}
for(int i = 1;i<len-1;i++)
if(arr[i]>maxhill && arr[i-1]<arr[i] && arr[i+1]<arr[i]){
maxhill = arr[i];
}
if(arr[i]<minvalley && arr[i-1]>arr[i] && arr[i+1]>arr[i]){
minvalley = arr[i];
}

return maxhill==0||minhill==0?0:max-min;
}

时间复杂度O(n),只需进行一次循环,空间复杂度O(1),只需常数个辅助变量。


评分及理由

(1)得分及理由(满分4分)

得分:2分

理由:学生的设计思想提到了峰谷探测仅需关注宽度为三的滑动窗口内的数据,这是正确的。但未明确说明如何高效找到峰谷对的最大差值,缺少从后往前遍历记录最小谷值的步骤,因此扣2分。

(2)得分及理由(满分7分)

得分:3分

理由:代码中逻辑错误较多:

  • 未正确处理数组长度小于3的情况(代码中逻辑错误,且未引用math.h)。
  • 峰和谷的判断逻辑正确,但未正确记录峰和谷的位置或值。
  • 未实现峰谷对的最大差值计算逻辑(直接返回max-min,逻辑错误)。
  • 变量命名错误(minhill未定义)。

因此扣4分。

(3)得分及理由(满分2分)

得分:1分

理由:时间复杂度分析正确(O(n)),但空间复杂度分析错误(应为O(n)而非O(1),因为需要存储最小谷值数组)。扣...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发