LeetcodeMaximum Product Subarray

Posted wuezs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetcodeMaximum Product Subarray相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode.com/problems/maximum-product-subarray/

题目:

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

思路:

c[i]表示从0~i的数组中 包含nums[i]这个结点的最大乘积。状态转移方程:c[i] = max{nums[i],c[i-1]*nums[i]} 

但这样的话,当有负数存在 结果就不对了,因为当前的乘积可能是负数,但后面可能还有负数,负负得正,当前的负数也应该被记录下来。

再加一个数组,用于记录最小乘积,因为当前最小乘积在未来可能会变成最大乘积。

算法

public int maxProduct(int[] nums) {  
    int maxProduct = nums[0];  
    int max[] = new int[nums.length];// 到i的连续最大和  
    int min[] = new int[nums.length];// 到i的连续最小和  
    max[0] = nums[0];  
    min[0] = nums[0];  
  
    for (int i = 1; i < nums.length; i++) {  
        max[i] = Math.max(nums[i] * min[i - 1], nums[i] * max[i - 1]);// 连续最大和需要考虑最小、最大情况  
        max[i] = Math.max(max[i], nums[i]);  
  
        min[i] = Math.min(nums[i] * min[i - 1], nums[i] * max[i - 1]);// 同理  
        min[i] = Math.min(nums[i], min[i]);  
  
        maxProduct = Math.max(maxProduct, max[i]);  
    }  
    return maxProduct;  
}  


以上是关于LeetcodeMaximum Product Subarray的主要内容,如果未能解决你的问题,请参考以下文章

leetcodeMaximum Subarray (53)

提高ValueError(“预期单例:%s”%self)ValueError:预期单例:product.pricelist()

1009 Product of Polynomials (25)(25 point(s))

查看Linux服务器是否虚拟化 dmidecode -s system-product-name | xargs echo ‘是否虚拟化‘

Product 1 Modulo N CodeForces - 1514C

购物车程序