leetcode_gym/_problems/maxProductSubarray.md
2026-08-25 19:14:07 -06:00

1.6 KiB

layout, title
layout title
page Maximum Product Subarray

Solution

One pass, keep track of minCurrent and maxCurrent

{% highlight python %}

arr1 = [2, 3, -2,4] arr2 = [2, 3, 6] arr3 = [2, -3, 6]

def getMaxProductSubarray(nums): if not nums: return left, right, record = 0, 0, -float('inf') for i in range(len(nums)): left = (left or 1) * nums[i] right = (right or 1) * nums[-i-1] record = max(record, left, right) return record

def getMaxProductSubarray(arr):

minCurrent = 1
maxCurrent = 1
maxRes = -99999

for i in range(len(arr)):

    current = arr[i]

    print(i, current, minCurrent, maxCurrent)

    if current>0:
        maxCurrent = maxCurrent * current
        minCurrent = min( minCurrent * current, 1)
    elif current==0:
        maxCurrent=1
        minCurrent=1
    else:
        x = maxCurrent
        maxCurrent = max( minCurrent * current, 1)
        minCurrent = x * current
    
    print(i, current, minCurrent, maxCurrent)

    if maxRes<maxCurrent:
        maxRes = maxCurrent
    
return maxRes

print(arr1) print(getMaxProductSubarray(arr1)) print()

print(arr2) print(getMaxProductSubarray(arr2)) print()

print(arr3) print(getMaxProductSubarray(arr3)) print()

{% endhighlight %}

{% highlight text %}

[2, 3, -2, 4] 0 2 1 1 0 2 1 2 1 3 1 2 1 3 1 6 2 -2 1 6 2 -2 -12 1 3 4 -12 1 3 4 -48 4 6

[2, 3, 6] 0 2 1 1 0 2 1 2 1 3 1 2 1 3 1 6 2 6 1 6 2 6 1 36 36

[2, -3, 6] 0 2 1 1 0 2 1 2 1 -3 1 2 1 -3 -6 1 2 6 -6 1 2 6 -36 6 6

{% endhighlight %}