class Solution:
def maxProfit(self, prices: List[int]) -> int:
n = len(prices)
if n == 0: return 0 # 边界条件
dp = [0] * n
minprice = prices[0]
for i in range(1, n):
#更新最小价格
minprice = min(minprice, prices[i])
#更新第i天的最大利润
dp[i] = max(dp[i - 1], prices[i] - minprice)
return dp[-1]
- 所谓最大的利润也就是再价格最低的时候买,在最高的时候卖出去
- 如果这个数组是严格递减的,那么就不可能赚钱
- 如果这个数组不是严格递减的,才有可能赚钱
- 定义一个dp数组,初始化都是0
- minprice初始化是第一天股票的价格
- 更新最小的价格:当前的价格和最小价格的最小值
- 然后比较i天的利润:max(前一天的利润,当前的价格-最低的价格)
- dp[-1]是收益最大的那一天
总结:动态规划比较简单的一个题目,也是股票问题的第一个题目。