Leetcode-买卖股票的最佳时机

本文介绍了如何使用动态规划解决股票交易的最大利润问题。作者首先尝试了暴力枚举的方法,但发现效率低下,随后通过分析得出动态规划的递推式,并实现了一个更高效的解决方案。递推式为d[i]=max{d[i-1], i-min(i-1)}

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
一开始直接蛮力枚举。。。。:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        d = 0
        for i in range(len(prices)):
            for j in range(i,len(prices)):
                if(prices[j]-prices[i]>d):
                    d = prices[j]-prices[i]
        return d

醉了。。。
在这里插入图片描述
还是得用动态规划的思想来做,但一开始确实是没找出来。。。

分析: 前 i 天的最大收益依赖于前 i-1 天的最大收益,和第 i 天的收益减去前 i-1 天中的最小买入价格,两个比较取最大,所以递推式为 d[i] = max{d[i-1] , i - min(i-1)}

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        d = 0      ##记录当前最大收益
        mi = prices[0]     ## 记录前i-1天中最小买入价格
        for i in range(1,len(prices)):
            if(d<(prices[i])-mi):
                d = prices[i]-mi
            elif(prices[i]<mi):
                mi = prices[i]
        return d

提交通过:
在这里插入图片描述

所以说,动态规划找到递推式很重要,继续练吧。小记,干巴爹!💪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值