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

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

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

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param prices int整型一维数组 
# @return int整型
#
class Solution:
    def maxProfit(self , prices: List[int]) -> int:
        # write code here
        """
        step1: dp[i][0] 表示第i天不持股到该天位置的最大收益,dp[i][1] 表示第i天持股,到该天为止的最大收益
        step2: 初始状态,第一天不持股,总收益为0,dp[0][0] = 0; 第一天持股,总收益为买股票花费, dp[0][1] = -prices[0]
        step3: 状态转移,对于之后的每天,当天不持股,总收益和前一天相同;当天卖掉,dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
        step4: 当天持股,若干天买,当天没卖,收益与前一天相同;当天买入,此时收益为负股价,选最大:dp[i][1] = max(dp[i-1][1],-prices[i])

        """
        n = len(prices)

        dp = [[0] * 2 for i in range(n)]
        dp[0][0] = 0
        dp[0][1] = -prices[0]

        # 遍历后,状态转移
        for i in range(1,n):
            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[n-1][0]

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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