LeetCode 152 — Maximum Product Subarray
Noveno problema de DP 1-D. Variante de Kadane (Max Subarray Sum) pero con producto: trampa de negativos que pueden voltear min en max. Solución: trackear min y max en cada paso.
Enunciado
Dado un array de enteros, devuelve el producto máximo de un subarray contiguo.
Solución — Track min y max simultáneamente
class Solution:
def maxProduct(self, nums):
result = curr_max = curr_min = nums[0]
for n in nums[1:]:
tmp = curr_max
curr_max = max(n, n * curr_max, n * curr_min)
curr_min = min(n, n * tmp, n * curr_min)
result = max(result, curr_max)
return resultAnálisis: O(n) tiempo, O(1) espacio.
Por qué trackear min
Si n es negativo, n * curr_min (un negativo grande) podría dar el máximo. Sin trackear min, perderías esa posibilidad. Por eso ambos.
Conexiones
- LC 53 (Maximum Subarray) — Kadane con suma.
- Próximo: 139-word-break.
Estado
- Leído
- Implementado desde cero
- Resuelto en LeetCode