DDSA Solutions

Stock Buy and Sell with Cooldown

Time: O(n)
Space: O(1)
Advertisement

Intuition

DP: after selling, must wait one day. States: held (own stock), sold (just sold today), rest (cooldown passed).

Algorithm

  1. 1held = -infinity, sold = 0, rest = 0.
  2. 2For each price: new_held = max(held, rest - price). new_sold = held + price. new_rest = max(rest, sold).
  3. 3Return max(sold, rest) at end.

Common Pitfalls

  • After selling (sold state), next day must be rest (cannot buy). After rest, can buy or rest.
Stock Buy and Sell with Cooldown.java
Java
// Approach: DP with three states: hold, sold (cooldown), rest. Transition between states each day.
// Time: O(n) Space: O(1)
class Solution {
    public int maxProfit(int arr[]) {
        int n = arr.length;
        if (n == 0)
            return 0;

        long dp0 = 0;
        long dp1 = -arr[0];
        long dp2 = 0;

        for (int i = 1; i < n; ++i) {
            long price = arr[i];
            long prev0 = dp0, prev1 = dp1, prev2 = dp2;

            dp0 = Math.max(prev0, prev2);
            dp1 = Math.max(prev1, prev0 - price);
            dp2 = prev1 + price;
        }

        return (int) Math.max(dp0, dp2);
    }
}
Advertisement
Was this solution helpful?