文章
316
粉丝
0
获赞
0
访问
46.9k
1):直接遍历数组对于给定的i,通过遍历数组比较A[i]*A[j]与maxnum的值,如果大于则将maxnum=A[i]*A[j],当本轮循环结束后使得res[i]=maxnum,并重复上述步骤直到i=n即可;
2):
void CallMulMax(int A[], int res[],int n){
int maxnum=-1;//记录给定i对应的乘积最大值
for(int i=0;i<n;i++){
for(int j=i;j<n;j++)
{
if(A[i]*A[j]>maxnum)maxnum=A[i]*A[j];//如果当前乘积比maxnum大就更新maxnum;
}
res[i]=maxnum;//本轮结束记录maxnum;
}
}
3):时间复杂度是o(n^2),空间复杂度是o(1);
评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生给出的算法基本思想是暴力枚举法,通过双重循环计算每个i对应的最大乘积。虽然思路正确,但未达到题目要求的"时间空间上尽可能高效"的标准。标准答案采用动态维护极值的方法,时间复杂度为O(n),而学生的方案为O(n²),效率较低。考虑到基本思想正确但不够高效,扣2分。
(2)得分及理由(满分7分)
得分:4分
理由:代码实现了暴力解法,逻辑正确但存在以下问题:
登录后发布评论
暂无评论,来抢沙发