LeetCode 121. 买卖股票的最佳时机
发布日期:2025-06-19 12:05:27 浏览次数:4 分类:精选文章

本文共 1105 字,大约阅读时间需要 3 分钟。

要解决这个问题,我们需要找到给定股票价格数组中能够获得的最大利润。规则是只能买入一次并卖出一次,且卖出价格必须高于买入价格。

方法思路

我们可以使用一个高效的算法来解决这个问题。这个算法的时间复杂度是O(n),空间复杂度是O(1),非常适合处理大数据量的情况。具体步骤如下:

  • 初始化变量:记录当前最小价格 min_price 和最大利润 max_profit。初始时,min_price 设为第一个价格,max_profit 设为0。
  • 遍历价格数组:从第二个价格开始遍历。
    • 如果当前价格大于 min_price,计算当前价格与 min_price 的利润,并与 max_profit 比较,更新 max_profit
    • 如果当前价格小于 min_price,更新 min_price
  • 返回结果:遍历结束后,返回 max_profit
  • 这种方法确保我们只遍历数组一次,时间复杂度为O(n),能够高效地解决问题。

    解决代码

    #include 
    using namespace std;int maxProfit(vector
    &prices) { if (prices.size() == 0) return 0; int min_price = prices[0]; int max_profit = 0; for (int i = 1; i < prices.size(); ++i) { if (prices[i] > min_price) { int profit = prices[i] - min_price; if (profit > max_profit) { max_profit = profit; } } else { min_price = prices[i]; } } return max_profit;}

    代码解释

    • 初始化min_price 设为第一个价格,max_profit 设为0。
    • 遍历数组:从第二个元素开始,检查当前价格与 min_price 的关系。
      • 如果当前价格高于 min_price,计算利润,并更新 max_profit
      • 如果当前价格低于 min_price,更新 min_price
    • 返回结果:遍历结束后,返回 max_profit

    这种方法确保了在最优的时间和空间复杂度下解决问题,适用于各种股票价格数组。

    上一篇:目标检测-小目标检测方法
    下一篇:LeetCode 1046. 最后一块石头的重量

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2026年06月04日 16时57分21秒