309最佳股票买卖时机含冷冻期

   日期:2024-01-17     浏览:48    评论:0    
from typing import List
# 用动态规划的写法来写题。
# 每一天都有五种情况发生,
#1,今天买入,2,今天卖出,3今天是冷冻期,4,今天不买入也不卖出(没有持有股票)5,今天不买入也不卖出(持有股票)
class Solution:
def maxProfit(self, prices: List[int]) -> int:
# 当天数小于二时,无法进行买卖交易,因此直接返回零
if len(prices) <= 1:return 0
# 定义列表表示状态方程
dp = [[0,0,0,0,0] for _ in range(len(prices)) ]
# 定义初始值的状态
# 今天买入的利润为负值
dp[0][0] = -prices[0]
# 第一天不可能卖出
dp[0][1] = float("-inf")
# 第一天不可能处于冷冻期
dp[0][2] = float("-inf")
# 不进行交易利润为零
dp[0][3] = 0
# 第一天不可能持有股票,同时不交易
dp[0][4] = float("-inf")
# 进行遍历
for index in range(1,len(prices)):
# 今天买入,昨天可能是冷冻期,或者没有交易
dp[index][0] = max(dp[index - 1][3],dp[index - 1][2]) - prices[index]
# 今天卖出,可能是昨天买入的,也可能是昨天已经持有但没有交易
dp[index][1] = max(dp[index - 1][0],dp[index - 1][4]) + prices[index]
# 今天为冷冻期代表昨天卖出
dp[index][2] = dp[index - 1][1]
#今天不交易,昨天可能是冷冻期,或者昨天就不交易
dp[index][3] = max(dp[index -1][3],dp[index - 1][2])
# 今天不交易(但持有股票),可能是昨天就没有交易同时持有股票,也可能是昨天刚买的股票。
dp[index][4] = max(dp[index - 1][4],dp[index - 1][0])
return max(dp[-1])

A = Solution()
print(A.maxProfit([1,2,3,0,2]))
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服