文章
63
粉丝
0
获赞
0
访问
13.4k
(1) 由题易得,如果A[i]>0,则A[i]应该乘一个在A[i]右侧数字中最大的数,如果A[i]<0,则A[i]应该乘一个A[i]右侧中最小的数。所以,我们可以先建立两个数组,max_A[n]与min_A[n],max_A[i]等于i到n-1最大的数,min_A[i]等于i到n-1最小的数。然后我们遍历A[i],如果A[i]>0,则res[i]=A[i]*max_A[i]。反之,res[i]=A[i]*min_A[i]。(2)
void CallMulMax(int A[], int res[], int n) {
int max_A[n];
max_A[n-1]=A[n-1];
int min_A[n];
min_A[n-1]=A[n-1];
for (int i = n-2; i >= 0; i --) {
if (A[i]>max_A[i+1]){
max_A[i]=A[i];
}else {
max_A[i] = max_A[i+1];
}
if (A[i] < min_A[i+1]){
min_A[i] = A[i];
}else {
min_A[i] = min_A[i+1];
}
}
for (int i = 0; i < n; i ++){
if (A[i] >0){
res[i] = A[i] * max_A[i];
}else {
res[i] = A[i] *min_A[i];
}
}
}
(3)时间复杂度:O(n)。因为无论是max_A数组,min_A数组的初始化,还是res[i]的计算,我们只遍历了一遍数组,总共只遍历了两次,所以为O(n)。
空间复杂度:O(n)。因为我们要维护max_A数组与min_A数组,所以空间复杂度为两数组的规模,所以为O(n)。
评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生正确理解了题目要求,提出了使用后缀最大值和最小值数组的思路。基本思想与标准答案一致,虽然实现方式不同但逻辑正确。对于正数和负数分别处理的方法合理,能够正确计算乘积最大值。
(2)得分及理由(满分7...
登录后发布评论
暂无评论,来抢沙发