一、刷题:
1.leetcode题目 . 188.买卖股票的最佳时间IV - 力扣(LeetCode)(hard)
解决:
class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:
k = min(k,len(prices)//2)+1
sell = [0]*k
buy = [float('-inf')]*k
buy[0] = -prices[0]
for p in prices:
for i in range(1,k):
buy[i] = max(buy[i],sell[i-1] -p)
sell[i] = max(sell[i],buy[i] + p)
return sell[-1]
2.leetcode题目 . 309. 买卖股票的最佳时机含冷冻期 - 力扣(LeetCode)(medium)
解决:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if not prices:
return 0
n = len(prices)
buy = -prices[0]
sell = 0
freeze = 0
for p in range(len(prices)):
buy1 = max(buy,sell-prices[p])
freeze1 = buy + prices[p]
sell1 = max(sell,freeze)
buy,sell,freeze = buy1,sell1,freeze1
return max(sell,freeze)
3.leetcode题目714 .714. 买卖股票的最佳时机含手续费- 力扣(LeetCode)
解决:
class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:
have = -prices[0]
no = 0
for i in range(1,len(prices)):
have1 = max(have,no-prices[i])
no1 = max(no,have+prices[i]-fee)
have,no = have1,no1
return no