文章
14
粉丝
0
获赞
0
访问
1.2k
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分
理由:代码中逻辑错误较多:
因此扣4分。
(3)得分及理由(满分2分)
得分:1分
理由:时间复杂度分析正确(O(n)),但空间复杂度分析错误(应为O(n)而非O(1),因为需要存储最小谷值数组)。扣...
登录后发布评论
暂无评论,来抢沙发