返回

揭秘股票交易秘诀:何时是最佳买入和卖出时机?

见解分享

在瞬息万变的股票市场中,投资者总是在寻求最佳的交易时机,力争以最低的成本买入,以最高的收益卖出。然而,市场行情变幻莫测,想要精准把握买卖时机并非易事。

LeetCode 第 309 题《割冷冻韭菜的最佳时机》为我们提供了一个经典的场景:假设有 n 天的股票价格列表,你可以在任意一天买入股票,并在任意一天卖出股票,只允许进行一次交易。你的目标是最大化你的利润。

乍一看,这个问题似乎很难解决,因为我们不知道股票价格将在未来如何变化。然而,我们可以利用动态规划算法来巧妙地解决这个问题。

动态规划是一种自底向上的求解方式,它将问题分解成较小的子问题,并逐层求解。对于本题,我们可以将股票价格列表分解成更小的子列表,并分别计算每个子列表的最大利润。

具体来说,我们可以使用一个数组 dp 来存储每个子列表的最大利润。其中,dp[i] 表示股票价格列表的前 i 天的最大利润。

我们首先计算 dp[1] 的值。由于我们只允许进行一次交易,因此 dp[1] 等于股票价格列表的第 1 天和第 2 天之间的差值(如果为负,则为 0)。

接下来,我们可以使用动态规划公式来计算 dp[i] 的值:

dp[i] = max(dp[i-1], prices[i] - minPrice)

其中,prices[i] 表示股票价格列表的第 i 天的股票价格,minPrice 表示股票价格列表的前 i 天的最低股票价格。

我们可以使用一个变量 minPrice 来记录股票价格列表的前 i 天的最低股票价格。每当我们计算 dp[i] 的值时,我们都会更新 minPrice 的值,使其等于股票价格列表的前 i 天的最低股票价格。

通过这种方式,我们可以逐层计算出 dp[i] 的值,直到计算出 dp[n] 的值。此时,dp[n] 就是股票价格列表的最大利润。

最后,我们将给出时间复杂度O(n)和空间复杂度O(1)的Python代码。

def maxProfit(prices):
  """
  :type prices: List[int]
  :rtype: int
  """
  if not prices or len(prices) == 0:
    return 0

  minPrice = prices[0]
  maxProfit = 0

  for price in prices:
    if price < minPrice:
      minPrice = price
    elif price - minPrice > maxProfit:
      maxProfit = price - minPrice

  return maxProfit


# 测试用例
prices = [7, 1, 5, 3, 6, 4]
print(maxProfit(prices))  # 输出:5

以上就是 LeetCode 第 309 题《割冷冻韭菜的最佳时机》的解题思路和代码实现。希望对您有所帮助!