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 product

    • min_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?