Say you have an array for which the ith element is the price of a given stock on day i.python
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times) with the following restrictions:數組
Example:spa
prices = [1, 2, 3, 0, 2]rest
maxProfit = 3code
transactions = [buy, sell, cooldown, buy, sell]blog
題目地址:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/ip
題意:element
給定一個數組prices,prices[i]表明第i天股票的價格。讓你進行若干次買賣,求最大利潤leetcode
設sell[i] 賣出操做的最大利潤。它須要考慮的是,第i天是否賣出。(手上有stock在第i天所能得到的最大利潤)get
buy[i] 買進操做的最大利潤。它須要考慮的是,第i天是否買進。(手上沒有stock在第i天所能得到的最大利潤)
因此,顯然有狀態轉移方程
最後顯然有sell[n-1] > buy[n-1] 因此咱們返回sell[n-1]
class Solution(object): def maxProfit(self, prices): """ :type prices: List[int] :rtype: int """ if not prices or len(prices) < 2: return 0 n = len(prices) buy, sell = [0] * n, [0] * n buy[0] = -prices[0] buy[1] = max(-prices[0], -prices[1]) sell[1] = max(0, prices[1] - prices[0]) for i in xrange(2, n): buy[i] = max(sell[i - 2] - prices[i], buy[i - 1]) sell[i] = max(buy[i - 1] + prices[i], sell[i - 1]) return sell[n - 1]