文章
4
粉丝
0
获赞
0
访问
733
我们需要计算数组 A
中每个元素 A[i]
与 A[i]
到 A[n-1]
之间某个元素 A[j]
(其中 i ≤ j
)的乘积的最大值,并将这个最大值存入 res[i]
中。换句话说,对于每个 i
,res[i]
是 max(A[i] * A[j])
(其中 j
从 i
到 n-1
)。
2)void CalMulMax(int A[], int res[], int n) { if (n == 0) return; // 处理空数组的情况 // 预先计算 max_suffix 数组 int* max_suffix = new int[n]; // 动态分配内存 max_suffix[n-1] = A[n-1]; // 最后一个元素的最大值就是它自己 // 从右向左计算 max_suffix for (int i = n-2; i >= 0; --i) { max_suffix[i] = (A[i] > max_suffix[i+1]) ? A[i] : max_suffix[i+1]; } // 计算 res[i] = A[i] * max_suffix[i] for (int i = 0; i < n; ++i) { res[i] = A[i] * max_suffix[i]; } delete[] max_suffix; // 释放动态分配的内存 }
3)
时间复杂度:O(n)
max_suffix
数组需要 O(n) 时间(从右向左遍历一次)。res
数组需要 O(n) 时间(遍历一次)。空间复杂度:O(n)
max_suffix
数组,大小为 n。评分及理由
(1)得分及理由(满分4分)
...
登录后发布评论
暂无评论,来抢沙发