算法练习7——买卖股票的最佳时机

LeetCode 121 买卖股票的最佳时机

给定一个数组 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)
  1. 上面dp不需要是一个数组,因为只需要n-1的数值
  2. 上面动态规划的思路和这种想法是等价的:计算每天的最大收益然后看哪一天收益最高,而计算每天最大收益,只需要记录这天之前所有价格中的最低值,然后相减即为当天最大收益

你可能感兴趣的:(数据结构与算法,算法)