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。

  • 解决方案:遍历数组,更新最小值和最大值,计算利润差。

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

  • 如果当前价格大于最大值,则更新最大值。

  • 始终计算利润差,确保获取最大利润。

🔎

延伸解读

最大利润的计算方法

在解决买卖股票问题时,关键在于如何有效地计算最大利润。通过遍历价格数组,实时更新最小值和最大值,可以避免不必要的排序操作,从而提高效率。这种方法确保了在每一步都能及时获取当前的最大利润差,适合处理大规模数据。

交易限制与风险

在实际交易中,买入和卖出股票的时机至关重要。文章中提到的策略假设可以在未来某天卖出,但市场波动可能导致实际操作中无法实现预期利润。因此,投资者应关注市场动态,灵活调整策略,以应对潜在风险。

算法性能与优化

该算法的时间复杂度为O(n),在处理大规模数据时表现良好。虽然可以进一步优化算法,但当前实现已在性能上取得了不错的平衡。理解算法的性能特征有助于在实际应用中选择合适的解决方案,尤其是在面对海量数据时。

延伸问答

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

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

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

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

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

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

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

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

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

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

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

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

🏷️

标签

➡️

继续阅读