文章
64
粉丝
1
获赞
0
访问
7.3k
(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分
理由:学生设计思想中提到了峰谷交替出现的特性,并尝试通过一次遍历记录最高峰和计算峰谷差,思路基本正确。但存在逻辑缺陷:最高峰可能出现在当前谷之后,而学生算法中只使用之前遇到的最...
登录后发布评论
暂无评论,来抢沙发