文章
125
粉丝
0
获赞
1
访问
21.4k
(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分
理由:
登录后发布评论
暂无评论,来抢沙发