文章
149
粉丝
195
获赞
0
访问
19.0k
1)
这个问题要求对每个位置 i,计算以 A[i] 结尾的所有连续子数组的乘积最大值。
因为乘积有正负号影响,一个很小的负数乘一个负数可能变成很大的正数,所以我们需要同时维护 以 A[i] 结尾的连续子数组乘积的最大值 和 最小值。
设:
maxEndingHere[i]:以 A[i] 结尾的连续子数组乘积的最大值
minEndingHere[i]:以 A[i] 结尾的连续子数组乘积的最小值
递推关系:
当 i = 0 时:
当 i > 0 时:
然后 res[i] = maxEndingHere[i]。
2)
void calMulMax(int A[], int res[], int n) {
if (n == 0) return;
// 初始化:以 A[0] 结尾的最大和最小乘积就是 A[0] 本身
int maxEndingHere = A[0];
int minEndingHere = A[0];
res[0] = A[0];
for (int i = 1; i < n; i++) {
// 保存旧值,因为下面计算会覆盖
...
登录后发布评论
暂无评论,来抢沙发