152. Maximum Product Subarray

152. Maximum Product Subarray

因为存在正负数相乘的问题,如果是负数,那么乘的记忆值越小越好,如果是正数,乘的记忆值越大越好,因此这里我们需要记录两个值,当前下标前的最小值和下标前的最大值

int maxProduct(vector<int>& nums) {
    int res=nums[0];

    for(int i=1, mi=nums[0], ma=nums[0];i<nums.size();++i) {
        if (nums[i]<0) swap(mi, ma);

        mi = min(nums[i], mi*nums[i]);
        ma = max(nums[i], ma*nums[i]);

        res = max(ma, res);
    }
    return res;
}

#DP