题解 | #买卖股票的最好时机(二)#

买卖股票的最好时机(二)

https://www.nowcoder.com/practice/9e5e3c2603064829b0a0bbfca10594e9

参照别人的思路,记录下结题思路。
dp[i]表示第i天的收益
最后一个数组表示卖不卖。
0不卖,1卖

dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+price[i])
class Solution:
    def maxProfit(self, k, price):
        if not prices:
            return 0
        n=len(prices)
        max_k=n//2
        if k >= max_k:#等同于k无穷大
            res=0
            for i in range(n-1):
                res+=max(0,price[i+1]-price[i])#多次买入卖出,叠加利润差即可
            return res
        else:
            max_k=k
        dp=[[0]*2 for _ in range(k+1)]
        for i in range(max_k+1):
            dp[0][i][1]=-prices[0]
        for i in range(1,n):
            for k in range(1,max_k+1):
                dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+prices[i])
                dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-prices[i])
        return dp[n-1][max_k][0]  
            


全部评论

相关推荐

05-07 20:52
吉林大学 Java
点赞 评论 收藏
分享
03-13 16:51
已编辑
门头沟学院 硬件开发
点赞 评论 收藏
分享
刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务