一、题目描述
给你一个整数数组 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用户!