uacs2024

导航

leetcode152. 乘积最大子数组

152. 乘积最大子数组

没做出来,直接看题解

灵神题解

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n = nums.size();
        vector<int> fMin(n);//右端点下标为 i 的子数组的最小乘积
        vector<int> fMax(n);//右端点下标为 i 的子数组的最大乘积
        fMin[0] = nums[0];fMax[0] = nums[0];
        for(int i = 1;i < n;++i){
            fMin[i] = min({fMin[i-1]*nums[i],fMax[i-1]*nums[i],nums[i]});//不用min嵌套使用,直接用大括号{}
            fMax[i] = max({fMin[i-1]*nums[i],fMax[i-1]*nums[i],nums[i]});
        }
        return ranges::max(fMax);
    }
};

空间优化:

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int res = INT_MIN;//答案可能是负数
        int f_max = 1, f_min = 1;
        for (int &x : nums) {
            int mx = f_max;//f_max = max({})先执行,所以先把f_max旧的值先保存起来
            f_max = max({f_max * x, f_min * x, x});
            f_min = min({mx * x, f_min * x, x});
            res = max(res, f_max);
        }
        return res;
    }
};

 

posted on 2025-03-11 22:00  ᶜʸᵃⁿ  阅读(8)  评论(0)    收藏  举报