152. 乘积最大子数组(动态规划)

class Solution {
    public int maxProduct(int[] nums) {
        int n = nums.length;
        int preMin = nums[0]; // i 之前最小值
        int preMax = nums[0]; // i 之前最大值
        int res = nums[0];
        for(int i = 1; i < n; i++) {
            if(nums[i] >= 0) {
                preMax = Math.max(preMax*nums[i],nums[i]);
                preMin = Math.min(preMin*nums[i],nums[i]);
            } else {
                int temp = preMax;
                preMax = Math.max(preMin*nums[i],nums[i]);
                preMin = Math.min(temp*nums[i],nums[i]);
            }
            res = Math.max(res,preMax);
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/yonezu/p/13404350.html