← Back to Leo Academy Masterclass

Problem #123: Best Time to Buy and Sell Stock III

Hard Dynamic Programming

Intuition & Strategy Breakdown

Maintain 4 state variables for 2 transactions: buy1, sell1, buy2, sell2. Maximize profit at each stock price step in O(n) time.

Python Solution

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        buy1 = buy2 = float('-inf')
        sell1 = sell2 = 0

        for price in prices:
            buy1 = max(buy1, -price)
            sell1 = max(sell1, buy1 + price)
            buy2 = max(buy2, sell1 - price)
            sell2 = max(sell2, buy2 + price)

        return sell2

Java Solution

class Solution {
    public int maxProfit(int[] prices) {
        int buy1 = Integer.MIN_VALUE, buy2 = Integer.MIN_VALUE;
        int sell1 = 0, sell2 = 0;

        for (int price : prices) {
            buy1 = Math.max(buy1, -price);
            sell1 = Math.max(sell1, buy1 + price);
            buy2 = Math.max(buy2, sell1 - price);
            sell2 = Math.max(sell2, buy2 + price);
        }

        return sell2;
    }
}
Watch Interactive Video on Leo Academy Main App