309. Best Time to Buy and Sell Stock with Cooldown
MediumLeetCodeYou are given an array prices
where prices[i]
is the price of a given stock on the ith day.
Find the maximum profit you can achieve. You may complete as many transactions as you like (i.e., buy one and sell one share of the stock multiple times) with the following restrictions:
- After you sell your stock, you cannot buy stock on the next day (i.e., cooldown one day).
- Note: You may not engage in multiple transactions simultaneously (i.e., you must sell the stock before you buy again).
Example 1
Input: prices = [
1,2,3,0,2
]Output:
3
Explanation: transactions = [buy, sell, cooldown, buy, sell]
Example 2
Input: prices = [
1
]Output:
0
Constraints
1 <= prices.length <= 5000
0 <= prices[i] <= 1000
How to solve the problem
- Recursion with Memoization
python
class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
from functools import cache
@cache
def dfs(i, hold):
if i < 0:
# If we do not hold stock, profit is 0. If we do, it's invalid (negative infinity).
return 0 if not hold else float("-inf")
if hold:
# Two choices:
# 1. Do nothing, continue holding.
# 2. Buy today: must have cooled down (not held stock two days ago).
return max(
dfs(i - 1, True), # Keep holding
dfs(i - 2, False) - prices[i], # Buy today
)
else:
# Two choices:
# 1. Do nothing, continue not holding.
# 2. Sell today.
return max(
dfs(i - 1, False), # Keep not holding
dfs(i - 1, True) + prices[i], # Sell today
)
return dfs(n - 1, False)
Complexity
- Time complexity: O(n)
- Space complexity: O(n)
Comments
No comments yet. Be the first to comment!