文章

7

粉丝

80

获赞

0

访问

71

头像
2025年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年6月27日 12:46
阅读数 5

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...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发