121. 买卖股票的最佳时机

问题描述

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/

解题思路

买卖股票的最佳时机是一个系列,这是最简单的一个题目。

首先我们定义一个dp数组,数组中元素的含义是,dp[i]代表了第i天为止能够获得的最大收益。

我们买卖股票的核心逻辑,就是低价买入高价卖出。所以我们要记录一个变量,来记住当天之前最低的股票价格。

所以状态转移方程就是dp[i] = max(dp[i-1], prices[i]-min_price)

dp[i-1]当然就是代表了今天按照已经低点买入股票的策略后卖出股票的收益(卖还是不卖,由max决定)。

代码

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # dp[i]为当天的最大利润
        dp = [0 for i in range(len(prices))]
        min_price = prices[0]
        for i in range(1, len(prices)):
            min_price = min(min_price, prices[i])
            dp[i] = max(dp[i-1], prices[i]-min_price)
        return max(dp)

 既然我们在状态转移的时候,已经计算了之前买入的收益,那么dp的最后一个值就是最终最大的收益。

class Solution:
    def maxProfit(self, prices) -> int:
        min_price = prices[0]
        dp = [0] * len(prices)
        for i in range(1, len(prices)):
            dp[i] = max(dp[i-1], prices[i]-min_price)
            min_price = min(prices[i], min_price)
        return dp[-1]

 

posted @ 2023-01-15 17:58  BJFU-VTH  阅读(16)  评论(0编辑  收藏  举报