文章
16
粉丝
42
获赞
14
访问
4.9k
1) 算法的基本思想
利用动态规划,遍历数组时同步维护以当前元素A[j]结尾的最大乘积max_end和最小乘积min_end(因负负得正,最小值可能在乘负数后变为最大值)。对于每个j,从i=0到j的所有子数组A[i..j]的乘积最大值,等价于A[j]本身、max_endA[j]、min_endA[j]三者中的最大值,将此最大值存入res[j],并更新max_end和min_end供下一轮计算。
2) C/C++算法实现
void CalMulMax(int A[], int res[], int n) {
if (n == 0) return; // 处理空数组边界情况
// 初始化:以A[0]结尾的子数组只有自身,故max_end和min_end均为A[0]
int max_end = A[0];
int min_end = A[0];
res[0] = A[0]; // res[0]的最大值就是A[0]本身
// 从第二个元素开始遍历(j从1到n-1)
for (int j = 1; j < n; ++j) {
// 临时保存当前max_end,避免更新min_end时被覆盖
int temp_max = max_end;
// 核心更新:以A[j]结尾的最大/最小乘积,由三种情况产生
// 1. 仅A[j]本身(前面的乘积为负,不如重新开始)
// 2. 之前的最大乘积 * A[j](正正得正,或负负得正后更大)
// 3. 之前的最小乘积 * A[j](负负得正,可能成为新的最大值)
 ...
登录后发布评论
暂无评论,来抢沙发