0152: Maximum Product Subarray

class Solution:
    def maxProduct(self, nums):
        out = cmin = cmax = nums[0]
        
        for n in nums[1:]:
            candidates = (n, cmin * n, cmax * n)
            cmax = max(candidates)
            cmin = min(candidates)
            out = max(out, cmax)
        
        return out