文章
7
粉丝
80
获赞
0
访问
71
1) 算法基本思想
由于数组元素可能包含负数,负数相乘可产生大正数,故对每个位置 i ,需同时维护 以 i 开头的子数组的最大乘积 和 最小乘积(最小乘积乘负数可转为最大)。从后往前遍历数组,利用 i+1 位置的最大/最小乘积递推计算 i 位置的结果,确保每个元素处理时间为 O(1),整体复杂度 O(n)。
2) C++ 算法实现(关键注释)
cpp
void CalMulMax(int A[], int res[], int n) {
if (n == 0) return; // 空数组处理
// 初始化:最后一个元素的最大、最小乘积均为自身
int max_so_far = A[n-1];
int min_so_far = A[n-1];
res[n-1] = max_so_far; // 单个元素的乘积即自身
// 从后往前遍历,递推计算每个i的最大乘积
for (int i = n-2; i >= 0; --i) {
int curr1 = A[i] * max_so_far; // A[i]与i+1的最大乘积组合
int curr2 = A[i] * min_so_far; // A[i]与i+1的最小乘积组合
// 三者(自身、乘最大、乘最小)取最大和最小,更新当前状态
max_so_far = max({A[i], curr1...
登录后发布评论
暂无评论,来抢沙发