文章

16

粉丝

42

获赞

14

访问

4.9k

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

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](负负得正,可能成为新的最大值)
 ...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发