返回

LeetCode Top100 挑战:买卖股票的最佳时机 - 每日一题之 15/100

前端

前言

欢迎来到 LeetCode Top100 挑战系列文章的第 15 篇!在这一系列文章中,我们将每天解决一道 LeetCode 算法题,并分享我们的解题思路和代码实现。今天,我们要解决的是一道经典的股票交易问题——买卖股票的最佳时机。

题目

给定一个数组 prices,其中 prices[i] 是股票在第 i 天的价格。你只能买卖股票一次。你的目标是最大化你的利润。

示例 1:

输入:prices = [7,1,5,3,6,4]
输出:5
解释:在第 2 天买入股票,在第 5 天卖出股票,利润为 6-1 = 5。

示例 2:

输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下,没有交易机会,所以利润为 0

提示:

  • 1 <= prices.length <= 3 * 10^4
  • 0 <= prices[i] <= 10^4

解题思路

这个问题可以采用贪心算法来解决。贪心算法是一种在每个步骤中做出局部最优选择,从而达到全局最优解的算法。在解决这个问题时,我们可以使用两个变量来记录股票的最低价格和最高价格。每当遇到一个比最低价格更低的价格时,我们就更新最低价格;每当遇到一个比最高价格更高的价格时,我们就更新最高价格。最后,我们计算最高价格与最低价格的差值,这就是我们可以获得的最大利润。

代码示例

def max_profit(prices):
  """
  计算买卖股票的最大利润。

  参数:
    prices: 股票价格列表。

  返回:
    最大利润。
  """

  # 初始化最低价格和最高价格。
  min_price = float('inf')
  max_price = 0

  # 遍历股票价格列表。
  for price in prices:
    # 更新最低价格。
    if price < min_price:
      min_price = price

    # 更新最高价格。
    if price > max_price:
      max_price = price

  # 计算最大利润。
  profit = max_price - min_price

  # 返回最大利润。
  return profit


# 测试代码。
prices = [7, 1, 5, 3, 6, 4]
profit = max_profit(prices)
print(profit)  # 5

prices = [7, 6, 4, 3, 1]
profit = max_profit(prices)
print(profit)  # 0

厉害老哥的写法

def max_profit(prices):
  """
  计算买卖股票的最大利润。

  参数:
    prices: 股票价格列表。

  返回:
    最大利润。
  """

  # 初始化最大利润。
  max_profit = 0

  # 遍历股票价格列表。
  for i in range(1, len(prices)):
    # 计算当前利润。
    profit = prices[i] - prices[i-1]

    # 更新最大利润。
    if profit > max_profit:
      max_profit = profit

  # 返回最大利润。
  return max_profit


# 测试代码。
prices = [7, 1, 5, 3, 6, 4]
profit = max_profit(prices)
print(profit)  # 5

prices = [7, 6, 4, 3, 1]
profit = max_profit(prices)
print(profit)  # 0

每日一题

从今天开始,我们将不鸽,每天一道算法题并发布文章。希望大家共同学习和进步!

总结

在本文中,我们详细讲解了如何使用贪心算法解决买卖股票的最佳时机问题。此外,我们还分享了一位厉害老哥的解法,以供大家学习和参考。最后,我们宣布从今天开始,我们将不鸽,每天一道算法题并发布文章,希望大家共同学习和进步!

相关链接