121. 买卖股票的最佳时机(简单)- LeetCode

题目描述

在这里插入图片描述

自己解法及改进

维持一个数组,用动态规划的思想,记录在某一天卖出时的最大利润,最后遍历求取最大值,即买卖股票的最佳策略。缺点是空间复杂度过高。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices:
            return 0
        profit = [0 for val in prices]
        minPrice = prices[0]
        for i in range(1,len(prices)):
            if prices[i] > minPrice:
                profit[i] = prices[i] - minPrice
            else:
                profit[i] = 0
                minPrice = prices[i]
        return max(profit)             

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( n ) O(n) O(n)
在这里插入图片描述
改进:使用一个变量maxProfit来存储当前最大利润,可以极大节省存储空间:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        inf = int(1e9)
        minPrice = inf
        maxProfit = 0
        for price in prices:
            profit = price - minPrice
            maxProfit = max(maxProfit,profit)
            minPrice = min(price,minPrice)
        return maxProfit

时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)
在这里插入图片描述

题解区

题解区众多解答参考:题解区解答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值