Leetcode — 顶级面试 150–121. 买卖股票的最佳时机

Leetcode — 顶级面试 150–121. 买卖股票的最佳时机

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

给定一个股票价格数组,选择一天买入,未来某天卖出以最大化利润。如果无法获利,返回0。示例:输入[7,1,5,3,6,4],输出5(在第2天买入,第5天卖出)。通过遍历数组更新最小值和最大值,计算利润差。

🎯

关键要点

  • 给定一个股票价格数组,选择一天买入,未来某天卖出以最大化利润。
  • 如果无法获利,返回0。
  • 示例1:输入[7,1,5,3,6,4],输出5(在第2天买入,第5天卖出)。
  • 示例2:输入[7,6,4,3,1],输出0(没有交易,最大利润为0)。
  • 约束条件:1 <= prices.length <= 105,0 <= prices[i] <= 104。
  • 解决方案:遍历数组,更新最小值和最大值,计算利润差。
  • 如果当前价格小于最小值,则重置最小值和最大值。
  • 如果当前价格大于最大值,则更新最大值。
  • 始终计算利润差,确保获取最大利润。

延伸问答

如何选择买入和卖出股票的最佳时机?

选择一天买入,未来某天卖出,以最大化利润。遍历价格数组,更新最小值和最大值,计算利润差。

如果无法获利,应该返回什么?

如果无法获利,应该返回0。

给定的股票价格数组有什么限制?

限制条件为1 <= prices.length <= 105,0 <= prices[i] <= 104。

能否通过排序来解决买卖股票的问题?

不建议排序,因为排序可能导致无法正确计算利润差。

如何在遍历数组时更新最小值和最大值?

如果当前价格小于最小值,则重置最小值和最大值;如果当前价格大于最大值,则更新最大值。

示例中如何计算最大利润?

示例中,输入[7,1,5,3,6,4],在第2天买入(价格1)和第5天卖出(价格6),利润为6-1=5。

➡️

继续阅读