返回

买入低价股票,卖出高价股票:征服LeetCode 121

后端

在股票市场上,把握正确的时机买入和卖出股票,是投资成功的关键。LeetCode 121:“买卖股票的最佳时机”要求投资者找到最佳的时机买入股票,并在其价格达到最高点时卖出,以获得最大利润。

踏上征服LeetCode 121的征途,我们首先要了解题目的精髓。这道题看似简单,但实则蕴藏着深刻的动态规划思想。我们必须寻找到买入股票的最低点,以及卖出股票的最高点,才能实现利润最大化。

一次遍历,洞悉市场先机

面对LeetCode 121,我们可以采取一次遍历的方法来解决问题。一次遍历意味着我们只遍历一次股票价格数组,就能找到买入和卖出的最佳时机。

在一次遍历中,我们会遇到三种不同的状态:

  • 未持有股票: 处于这个状态时,我们可以选择买入股票或等待下一个机会。
  • 持有股票: 处于这个状态时,我们需要等待股票价格上涨,才能在合适的时机卖出股票获利。
  • 已卖出股票: 处于这个状态时,我们已经获利了结,可以等待下一个买入机会。

代码示例

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

    min_price = float('inf')
    max_profit = 0

    for price in prices:
        if price < min_price:
            min_price = price
        elif price - min_price > max_profit:
            max_profit = price - min_price

    return max_profit

示例:

考虑以下股票价格数组:

[7, 1, 5, 3, 6, 4]

使用一次遍历的方法,我们可以得到以下步骤:

  1. 初始状态: 未持有股票
  • 股价为7,由于尚未持有股票,因此我们等待下一个买入机会。
  1. 持有股票:
  • 股价下跌至1,我们以1元的价格买入股票。
  1. 持有股票:
  • 股价上涨至5,但我们继续持有股票,等待更高的价格。
  1. 已卖出股票:
  • 股价下跌至3,我们以3元的价格卖出股票,获利2元。
  1. 未持有股票:
  • 股价上涨至6,我们等待下一个买入机会。
  1. 持有股票:
  • 股价下跌至4,我们以4元的价格买入股票。
  1. 已卖出股票:
  • 股价上涨至6,我们以6元的价格卖出股票,获利2元。

经过一次遍历,我们最终获得的利润为4元。

LeetCode 121:“买卖股票的最佳时机”看似简单,实则蕴藏着深刻的算法思想。通过一次遍历的方法,我们可以高效地找到买入和卖出的最佳时机,从而实现利润最大化。希望这篇文章能为您在征服LeetCode 121的征途中提供帮助。