leetcode 122. 买卖股票的最佳时机 II

一、题目描述

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

难度:中等!!!
在这里插入图片描述

二、思路

思考中…

好像没啥思路,啊啊啊啊 ,少年, 要止步于此了吗?管他呢 打开题解看看先。一堆的动态规划解法,诶 CRTL+C CTRL+V 一气呵成,点击提交,过啦。您超过了百分之50的python3提交用户。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp = [[0, 0] for _ in prices]
        dp[0][0] = -prices[0]

        for i in range(1, len(prices)):
            dp[i][0] = max(dp[i-1][0], dp[i-1][1] - prices[i])
            dp[i][1] = max(dp[i-1][1], dp[i-1][0] + prices[i])
        return dp[-1][-1]

啊,才百分之50。用自己的方法写,再想想,再想想,再想想。

A moment late.

我悟了,和 买卖股票的最佳时机 I 差不多啊。
[1,3,5] 的最大利润是 4,可以1买入3卖出,然后3买入5卖出。也可以1买入5卖出。
用一个变量保存预买入的价格,如果碰到比这个买入价格低的,则替换。如果比这个价格高,则卖出,将这个差累加起来就是最终的利润。
coding…

三、最终代码

最终代码为:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        sumProfit = 0
        m = prices[0]
        for i in prices:
            if i < m:
                m = i
            else:
                sumProfit += i-m	#	累加利润
                m = i # 卖出后将卖出的价格作为预购入价格
        return sumProfit

O(n)的时间复杂度啊,这代码比 买卖股票的最佳时机 I 还少啊!点击提交~
过啦,您超过百分之80的Python3用户!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值