LeetCode 309 — Best Time to Buy and Sell Stock with Cooldown

Tercer problema de DP 2-D. DP con state machine (3 estados: hold / sold / rest). Después de vender, cooldown de 1 día.

Enunciado

Como 121-best-time-to-buy-and-sell-stock pero múltiples transacciones permitidas, con cooldown de 1 día tras cada venta.


Solución — State machine 3 estados

class Solution:
    def maxProfit(self, prices):
        # Estados: hold (con stock), sold (acabo de vender, cooldown), rest (sin stock)
        hold = -prices[0]                        # comprar el día 0
        sold = 0
        rest = 0
        for p in prices[1:]:
            prev_sold = sold
            sold = hold + p                      # vender hoy
            hold = max(hold, rest - p)           # mantener o comprar (desde rest)
            rest = max(rest, prev_sold)          # quedarse sin stock
        return max(sold, rest)

Análisis: O(n) tiempo, O(1) espacio.

Las transiciones

rest → hold (comprar)
hold → sold (vender)
sold → rest (cooldown obligatorio 1 día)
rest → rest (no hago nada)

Conexiones

Estado

  • Leído
  • Implementado desde cero
  • Resuelto en LeetCode