文章
65
粉丝
19
获赞
367
访问
38.8k
1.找正数的最大值
和负数的最小值,若A[i]是正数则乘正数的最大值,反之乘负数的最小值
2.
void CallMulMax(int A[], int res[],int n){
int ma = INT_MIN; //存储最小值
int mi = INT_MAX; //存储最大值
for(int i=0;i<n;i++){
if(A[i]>0)
ma = max(ma,A[i]);
else
mi = min(mi,A[i]);
}
for(int i=0;i<n;i++){
if(A[i]>0){
res[i] = ma*A[i];
}
else{
res[i] = mi*A[i];
}
}
}
3.时间复杂度为O(n)空间复杂度为O(1)
评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生的基本思想部分提到了找正数的最大值和负数的最小值,但未考虑到乘积的最大值可能由两个负数相乘得到(如示例中的-9*-9=81)。此外,未说明如何处理从当前位置到末尾的最大值和最小值,因此思路不完全正确。
(2)得分及理由(满分7分)
得分:3分
理由:代码逻辑存在错误,仅考虑了当前元素与全局最大值或最小值的乘积,未正确处理从当前位置到末尾的极值问题(如示例中的-9需要与自身相乘得到最大值81)。此外,代码未处理所有可能的乘积情况(如正数与负数相乘的极端情况),导致结果不正确。
(3)得分及理由(满分2分)
得分:1分
理由:时间复杂度和空间复杂度的分析是正确的,但由于算法逻辑错误,实际复杂度虽然符合O(n)和O(1),但结果不正确,因此扣1分。
题目总分:2+3+1=6分
登录后发布评论
暂无评论,来抢沙发