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

发布时间:2024年01月12日

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

在这里插入图片描述

思路如下图所示

在这里插入图片描述

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

    //空间压缩!

}
文章来源:https://blog.csdn.net/qq_37247026/article/details/135544595
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。