zoukankan      html  css  js  c++  java
  • 309最佳股票买卖时机含冷冻期

    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]))
  • 相关阅读:
    Linux上安装Tomcat
    SQLServer2008 关于while循环
    [转]接口和抽象类
    windows 装XP系统
    SQLServer2008 表与表之间的数据导入
    问题消灭机
    报错。。。。。。。。。。
    疑问...........
    SQLServer In和Exists
    struts2 访问一个action的时候出现多次重复访问问题(2次或者3次)
  • 原文地址:https://www.cnblogs.com/cong12586/p/13301051.html
Copyright © 2011-2022 走看看