文章
156
粉丝
195
获赞
0
访问
28.4k
1)
若 n == 0 直接返回。
res[0] = A[0] * A[0]。
初始化 maxSoFar = A[0], minSoFar = A[0]。
循环 i = 1 到 n-1:
a. 计算 prod1 = A[i] * maxSoFar, prod2 = A[i] * minSoFar, prod3 = A[i] * A[i]。
b. res[i] = max(prod1, prod2, prod3)。
c. 更新 maxSoFar = max(maxSoFar, A[i])。
d. 更新 minSoFar = min(minSoFar, A[i])。
2
#include <algorithm> // for max, min
void calMulMaxLeft(int A[], int res[], int n) {
if (n == 0) return;
// 初始化第一个元素
res[0] = A[0] * A[0];
int maxSoFar = A[0];
int minSoFar = A[0];
for (int i = 1; i < n; ++i) {
// 候选乘积
int prod1 = A[i] * maxSoFar;
int prod2 = A[i] * minSoFar;
int prod3 = A[i] * A[i];
// 取最大值
int maxProd = prod1;
if (prod2 > maxProd) maxProd = prod2;
if (prod3 > maxProd) maxProd = prod3;
res[i] = maxProd;
...
登录后发布评论
暂无评论,来抢沙发