## Description

https://leetcode.com/problems/maximum-product-subarray/

Given an integer array `nums`

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

**Example 1:**

Input:[2,3,-2,4]Output:`6`

Explanation:[2,3] has the largest product 6.

**Example 2:**

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

## Explanation

need to keep track of min product and max product because both positive and negative numbers exist.

## Python Solution

```
class Solution:
def maxProduct(self, nums: List[int]) -> int:
if not nums:
return 0
result = nums[0]
min_product = max_product = 1
for num in nums:
choices = num, min_product * num, max_product * num
max_product = max(choices)
min_product = min(choices)
result = max(result, max_product)
return result
```

- Time complexity: ~N
- Space complexity: ~1