Решите задачу о подмассиве максимального продукта

Вот три популярных метода решения задачи «Подмассив максимального продукта»:

Метод 1: грубая сила
Подход грубой силы включает в себя проверку всех возможных подмассивов и вычисление их произведения. Затем возвращается максимальный продукт среди всех подмассивов.

def maxProductSubarray(nums):
    n = len(nums)
    max_product = float('-inf')
    for i in range(n):
        product = 1
        for j in range(i, n):
            product *= nums[j]
            max_product = max(max_product, product)
    return max_product

Метод 2: динамическое программирование
В этом подходе мы поддерживаем две переменные: max_productи min_product. Мы перебираем массив и обновляем эти переменные, учитывая текущий элемент и предыдущие максимальные и минимальные продукты.

def maxProductSubarray(nums):
    n = len(nums)
    max_product = nums[0]
    min_product = nums[0]
    result = nums[0]
    for i in range(1, n):
        if nums[i] < 0:
            max_product, min_product = min_product, max_product
        max_product = max(nums[i], max_product * nums[i])
        min_product = min(nums[i], min_product * nums[i])
        result = max(result, max_product)
    return result

Метод 3: Префиксное произведение
В этом подходе мы вычисляем префиксное произведение массива и отслеживаем максимальное полученное на данный момент произведение. При обнаружении нуля мы сбрасываем префиксное произведение.

def maxProductSubarray(nums):
    n = len(nums)
    prefix_product = 1
    max_product = float('-inf')
    for i in range(n):
        prefix_product *= nums[i]
        max_product = max(max_product, prefix_product)
        if prefix_product == 0:
            prefix_product = 1
    prefix_product = 1
    for i in range(n - 1, -1, -1):
        prefix_product *= nums[i]
        max_product = max(max_product, prefix_product)
        if prefix_product == 0:
            prefix_product = 1
    return max_product