leetcode【简单】121、买股票的最佳时机

在这里插入图片描述
思路:动态规划/双指针 及其优化写法
i用来遍历,minprice记录目前最小值,每遍历一个数记录一会利润,保存最大的profit

可以看作双指针i和minprice,i不停移动,minprice保持在最小位置

import math
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit=0
        minprice=math.inf
        for i in prices:
            minprice=min(minprice,i)
            profit=max(profit,i-minprice)
        return profit

动态规划写法:dp[i]记录了每天为止最大的利润,其实我们只需要最后一天的

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])
            dp[i] = max(dp[i - 1], prices[i] - minprice)

        return dp[-1]

猜你喜欢

转载自blog.csdn.net/qq_40707462/article/details/112789476