【题目描述】
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] 的最大值
【参考答案】