文章

125

粉丝

0

获赞

1

访问

21.4k

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

(1)设置变量im,jm,m来表示A[i] - A[j]的值,遍历数组A,如果在i处找到了峰,那就检查i右边是否存在谷,如果找到啦就比对大小,A[i] - A[j]比m大则更新对应的值,在初始处设置变量flag,表明是否存在峰谷对,如果flag=0则不存在,找到了就把flag置为1,当flag=0时就返回0,flag=1时就打印(im,jm)的值

(2)int solution(int *A,int n){

int i,j,im=0,jm=0,m=-99999,flag=0; //初始化变量,其中初始m是一个极小负值,能保证找到的第一个峰值对肯定大于m

for(i=2;i<n-1;i++){

if(A[i] > A[i-1]&A[i] > A[i+1]){   //找到了一个峰

for(j=i+1;j<n-1;j++) //在峰右边找谷

if(A[j] < A[j-1]&A[j] < A[j+1]){  //找到了谷

if(A[i] - A[j]>m){if(flag==0){flag=1;}//存在这样的峰谷对

im=i;jm=j;m=A[i] - A[j]; //找到A[i] - A[j]更大,更新为更大处的i和j的值,并更新最大值

}}}}

if(flag==0){return 0;} //不存在这样的峰谷对,返回0

else{

printf(("%d","%d"),&im,&jm);打印最大值对应的i和j

return;

}

}

(3)时间复杂度O(n^2),空间复杂度O(1)


评分及理由

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

得分:3分

理由:学生的设计思想基本正确,能够描述出遍历数组寻找峰和谷的思路,并且通过双重循环来寻找峰谷对。但未提及如何高效记录峰和谷的位置,以及如何优化查找过程(如标准答案中的预处理最小谷值),导致效率较低。因此扣1分。

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

得分:5分

理由:

  • 代码逻辑基本正确,能够实现峰谷对的查找和最大差值的计算。
  • 存在以下问题:
    1. 循...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发