Maximum product subarray

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        n = len(nums)

        dpmin = [0] * n
        dpmax = [0] * n

        dpmin[0] = nums[0]
        dpmax[0] = nums[0]

        for i in range(1, n):
            dpmin[i] = min(
                dpmin[i - 1] * nums[i], 
                dpmax[i - 1] * nums[i], 
                nums[i]
            )
            dpmax[i] = max(
                dpmin[i - 1] * nums[i],
                dpmax[i - 1] * nums[i],
                nums[i]
            )

        return max(dpmax)

Maximum Product Subarray

Difficulty: Medium


Given an integer array nums, find a subarray that has the largest product, and return the product.

The test cases are generated so that the answer will fit in a 32-bit integer.

 

Example 1:

Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

 

Constraints:

  • 1 <= nums.length <= 2 * 104
  • -10 <= nums[i] <= 10
  • The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.