美文网首页
买卖股票的最好时机,有冷却时间(309)

买卖股票的最好时机,有冷却时间(309)

作者: 拔丝圣代 | 来源:发表于2018-03-06 00:00 被阅读0次

    题目


    给一个数组代表每天的股价,求获益最大为多少。
    限制

    • 一次只能持有一只股票。
    • 卖掉股票之后,第二天不能购买,第三天之后才可购买股票。

    思路


    又是一个典型的动态规划问题。分两种状态:

    • 最后一次操作是购买的情况下,前i天的最大获利为buy[i]
    • 最后一次操作是售出的情况下,前i天的最大获利为sell[i]

    状态转移如下:

    • 要求最后一次为购买的前i天最大获利buy[i],分两种情况:

      1. 第i天购买,则在i-2天之前已售出,需要找出前i-2天最后一次是售出的最大获利sell[i-2],再减去购买当日的价格price[i]
      2. 不购买,与前一天获利相同,即buy[i-1]

      因此buy[i] = max(sell[i-2] - price[i], buy[i-1])

    • 同理,根据最后一天是否出售,可以将sell[i]的求取分两种情况,去最大值,即sell[i] = max(buy[i-1]+price[i], sell[i-1])

    最后求得sell[n]即为所求。

    代码


    class Solution(object):
        def maxProfit(self, prices):
            """
            :type prices: List[int]
            :rtype: int
            """
            if len(prices) < 2:
                return 0
            sell = [0] * len(prices)
            buy = [-prices[0]] * len(prices)
            for i in range(1, len(prices)):
                buy[i] = max(buy[i-1], sell[i-2] - prices[i])
                sell[i] = max(sell[i-1], buy[i-1] + prices[i])
            return sell[len(prices)-1]
    

    相关文章

      网友评论

          本文标题:买卖股票的最好时机,有冷却时间(309)

          本文链接:https://www.haomeiwen.com/subject/mcwkfftx.html