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

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

https://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param prices int整型一维数组 
# @return int整型
#
class Solution:
    def maxProfit(self , prices: List[int]) -> int:
        # write code here
        if len(prices)<2:
            return 0

        dp = [[0]*2]*(len(prices))
        dp[0][0] = 0
        dp[0][1] = -prices[0]
        for i in range(1,len(prices)):
            dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])
            dp[i][1] = max(dp[i-1][1], -prices[i])

        return dp[len(prices)-1][0]

使用动态规划,将某一天i的收益分为持股和不持股dp[i][1] 和 dp[i][0], 第一天不持股的收益为0,持股的收益为-price[0]。因此dp[0][0] = 0, dp[0][1] = -prices[0]。

第i天若不持股,则有两种可能 1.前一天没持股 2.当天刚卖出。因此第i天持股的最大收益为

dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])

第i天若持股,则有两种可能 1.前一天持股 2.当天刚买入。因此第i天持股的最大收益为

dp[i][1] = max(dp[i-1][1], -prices[i])

全部评论

相关推荐

06-12 16:23
已编辑
小米_软件开发(准入职员工)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务