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;
    }
}

 

posted @ 2020-07-30 16:04  Sexyomaru  阅读(48)  评论(0编辑  收藏  举报