leetcode 买股票3

这道题可以说是比较难了,我想了好长时间,写出的算法也不算特别理想。
就大致说一下吧。

class Solution(object):    
	def maxProfit(self, prices):        
	    if not prices: 
	        return 0        
	    n = len(prices)
	    dp = [[0] * n for _ in range(3)]        
	    for k in range(1, 3):            
	        pre_max = -prices[0]            
	        for i in range(1, n):                
	            pre_max = max(pre_max, dp[k - 1][i - 1] - prices[i])                
	            dp[k][i] = max(dp[k][i - 1], prices[i] + pre_max)         						          return dp[-1][-1]

这里的return 不知道为什么总是不能缩进,可能是输入问题?
思路是:限制卖出次数小于等于k次 第n天第k次卖出时的最大利润:
1、前一天已经卖出k次:DP[k][n-1],所以只有一种情况,无法再买入和卖出;
 2、前一天已经卖出k-1次,DP[k-1][n] + 卖出第n天的股票后的利润;
边界条件: 如果第n-1天第k-1卖出后再买入的利润仍然比前一天还高,则买入,否则就不买,
也就是说增加买入次数更划算的时候,增加买入次数,否则维持买入次数不变;
pre_max = max(pre_max, dp[k - 1][n - 1] - prices[n])

发布了29 篇原创文章 · 获赞 28 · 访问量 301

猜你喜欢

转载自blog.csdn.net/weixin_45398265/article/details/104706247