Maximum Product Subarray
Question
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest product = 6.
Tags
LinkedIn Dynamic Programming Subarray
Related Problems
Medium Best Time to Buy and Sell Stock 41 % Medium Maximum Subarray Difference 23 % Easy Minimum Subarray 38 % Medium Maximum Subarray II
Analysis
本题其实是Maximum Subarray Sum问题的延伸,不同的是这里需要考虑元素的符号。
DP的四要素
状态:
max_product[i]: 以nums[i]结尾的max subarray productmin_product[i]: 以nums[i]结尾的min subarray product
方程:
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])
初始化:
max_product[0] = min_product[0] = nums[0]
结果:
每次循环中
max_product[i]的最大值
Solution
DP, with O(n) space, O(n) time
DP - Simplified - O(n) space, O(1) time
DP, improved, with O(1) space, O(n) time
O(1) space, O(n) time
Same idea but a more concise implementation
Reference
Last updated
Was this helpful?