文章
7
粉丝
0
获赞
0
访问
135
1.用O(2n)时间找出A中的最大/最小正数及负数,对于res[i],当A[i]为正时乘以最大正数,若不存在则最小正数,否则最大负数,最差最小负数,当A[i]取负数时为对称情况。
3.总的时间复杂度为O(n)(一次O(n)查最大最小正负数,一次O(n)遍历res),空间复杂度O(1)(即需要存储四个数字)
void CallMulMax(int A[], int res[],int n){
int anmax=-1,apmax=-1,anmin=-1,apmin=-1;
for(int i =0;i<n;i++){
if(A[i]>0){
if(apmax == -1 || A[apmax]<A[i])
apmax = i;
}
if (apmin == -1 || A[apmin]>=A[i]){
apmin=i;
}
}else if(A[i]<0){
if(anmax == -1 || A[anmax]>=A[i])
anmax = i;
}
if (anmin == -1 || A[anmin]<A[i]){
anmin=i;
}
}
for(int i = 0; i <n;i++){
res[i]=res[i]>0?res[i]*(apmax!=-1?apmax:(apmin!=-1?apmin:anmin!=-1?anmin:anmax)):res[i]*(anmax!=-1?anmax:anmin!=-1?anmin:apmin!=-1?apmin:apmax);
}
}
评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生的思路与标准答案不同,但基本正确。学生提出通过查找最大/最小正数和负数来解决,但未详细说明如何处理所有情况(如乘积可能的最大值)。思路部分正确但不完整,因此扣2分。
(2)得分及理由(满分7分)
得分:3分
理由:代码实现存在逻辑错误:
代...
登录后发布评论
暂无评论,来抢沙发