力扣 | 152. 乘积最大子数组

这道题目和最大子数组和还不一样,相乘需要考虑负负得正的问题!最大子数组和只需要记住前面的最大值就行!这里需要同时记住最小值!

力扣 | 152. 乘积最大子数组_第1张图片

思路如下图所示

力扣 | 152. 乘积最大子数组_第2张图片

public class Problem_152_MaximumProductSubarray {
    public int maxProduct(int[] nums) {
        int maxMps [] = new int[nums.length];
        int minMps [] = new int[nums.length];
        int ans = nums[0];
        maxMps[0] = nums[0];
        minMps[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            maxMps[i] = Math.max(maxMps[i - 1] * nums[i],Math.max(nums[i],minMps[i - 1] * nums[i]));
            minMps[i] = Math.min(minMps[i - 1] * nums[i],Math.min(nums[i],maxMps[ i - 1] * nums[i]));
            ans = Math.max(ans,maxMps[i]);
        }
        return ans;
    }

    //空间压缩!

}

你可能感兴趣的:(计算机基础,算法学习,编程语言,leetcode,算法,数据结构,java,动态规划)