给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
双重循环算收益,从数据数量级上看会超时,后面看评论区确实是
dp[n]
为在当天卖出的最大收益
class Solution:
def maxProfit(self, prices: List[int]) -> int:
dp = [0] * len(prices)
for idx, price in enumerate(prices):
if idx == 0:
continue
dp[idx] = max(dp[idx - 1] + price - prices[idx - 1], 0)
return max(dp)
上面动态规划的思路和这种想法是等价的:计算每天的最大收益然后看哪一天收益最高,而计算每天最大收益,只需要记录这天之前所有价格中的最低值,然后相减即为当天最大收益
class Solution:
def maxProfit(self, prices: List[int]) -> int:
res = 0
min_price = sys.maxsize
for item in prices:
res = max(res, item - min_price)
min_price = min(min_price, item)
return res