Lintcode191 Maximum Product Subarray solution 题解

【题目描述】

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

找出一个序列中乘积最大的连续子序列(至少包含一个数)。

【题目链接】

www.lintcode.com/en/problem/maximum-product-subarray/

【题目解析】

本题其实是Maximum Subarray Sum问题的延伸,不同的是这里需要考虑元素的符号。

DP的四要素

1、状态:

max_product[i]: 以nums[i]结尾的max subarray product

min_product[i]: 以nums[i]结尾的min subarray product

2、方程:

max_product[i] = getMax(max_product[i-1] * nums[i], min_product[i-1] * nums[i], nums[i])

min_product[i] = getMin(max_product[i-1] * nums[i], min_product[i-1] * nums[i], nums[i])

3、初始化:

max_product[0] = min_product[0] = nums[0]

结果:每次循环中 max_product[i] 的最大值

【参考答案】

www.jiuzhang.com/solutions/maximum-product-subarray/

你可能感兴趣的:(Lintcode191 Maximum Product Subarray solution 题解)