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]