Вот три популярных метода решения задачи «Подмассив максимального продукта»:
Метод 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