文章

64

粉丝

1

获赞

0

访问

7.3k

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

(1). 基本设计思想:由于若存在数组中若存在峰谷,则峰谷必须是交替出现的,故采用遍历数组找到最高的峰并记录该峰的下标fengIndex(该变量初始化为-1,表示还未找到峰),然后下次找到谷后若此时fengIndex!=-1,则表示谷前面一定有峰。由于fengIndex记录的是前面的最高峰,故A[i]-A[j]的最大值只能由当前谷和前面的最高峰组成峰谷对取得。

(2).算法实现如下:

int solution(int[] A,int n){
   int maxFen = INT32_MIN;//记录最大的峰
   int fenIndex = -1;//记录最大的峰的下标
   int ans = INT32_MIN;
   int flag=0;//记录是否存在峰谷对
   
   for(int i=1;i<n-1;i++){
      if(A[i]>A[i-1]&&A[i]>A[i+1]){
         //找到峰,峰后面只能接着谷或者没有谷
         if(maxFen<A[i]){
           maxFen=A[i];
           fengIndex=i;
         }
      }
      else if(A[i]<A[i-1]&&A[i]<A[i+1]){
         //找到谷,若fengIndex!=-1表示前面必有峰
         if(fengIndex!=-1){
           flag=1;
           ans=max(ans,A[fengIndex]-A[i]);
         }
      {
   }
   if(flag==0) return 0;//不存在峰谷对
   //返回最大的峰谷差值
   return ans;
}

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


评分及理由

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

得分:3分

理由:学生设计思想中提到了峰谷交替出现的特性,并尝试通过一次遍历记录最高峰和计算峰谷差,思路基本正确。但存在逻辑缺陷:最高峰可能出现在当前谷之后,而学生算法中只使用之前遇到的最...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发