文章

14

粉丝

0

获赞

0

访问

1.3k

头像
2025年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年11月27日 17:05
阅读数 48

(1)维护两个变量min_val与max_val,用于存储当前最小最大值,从数组尾部开始访问,当访问到第i个元素时,先更新Max与Min,对于A[i]>0,res[i]=A[i]*max_val;A[i]<=0,res[i]=A[i]*min_val;遍历完成即得到结果。

(2)

void calMulMax(int A[], int res[], int n) {
    if (n <= 0) return;  // 处理空数组情况
    
    // 初始化:处理最后一个元素
    int max_val = A[n-1];  // 当前子数组A[i..n-1]的最大值
    int min_val = A[n-1];  // 当前子数组A[i..n-1]的最小值
    res[n-1] = A[n-1] * A[n-1];  // 最后一个元素的乘积只能是自身相乘
    
    // 从倒数第二个元素开始,从后向前遍历
    for (int i = n-2; i >= 0; i--) {
        // 更新当前子数组的最大值和最小值
        if (A[i] > max_val) {
            max_val = A[i];  // 发现更大的值
        }
        if (A[i] < min_val) {
            min_val = A[i];  // 发现更小的值
        }
        
        // 根据A[i]的符号选择合适的乘数
        if (A[i] >= 0) {
            // 非负数:与最大值相乘得到最大乘积
            res[i] = A[i] * max_val;
        } else {
            // 负数:与最小值相乘得到最大乘积(负负得正)
            res[i] = A[i] * min_val;
        }
    }
    return;
}

(3)时间复杂度O(n),空间复杂度O(1)


评分及理由

(1)得分...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发