Skip to content

152. Maximum Product Subarray

#185

Problem link

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

Problem Summary

배열에서 subarray 곱 중 가장 최댓값을 구하는 문제

Solution

곱할 때 핵심은 현재까지 최댓값에 -를 곱하게 되면 최소가 되고 -를 더 곱하게 되면 다시 최대가 된다는 점이다.
즉 최대 최소가 번갈아가며 나올 수 있다는 것이다. 여기에서 maxim, minim 으로 최대, 최소를 다 선언해두고 계속 갱신해주면 된다.

Source Code

from typing import List


class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        ans = nums[0]
        maxim = nums[0]
        minim = nums[0]

        for i in range(1, len(nums)):
            if nums[i] < 0:
                maxim, minim = minim, maxim
            maxim = max(maxim * nums[i], nums[i])
            minim = min(minim * nums[i], nums[i])
            ans = max(ans, maxim)

        return ans