LeeCode 121. 买卖股票的最佳时机

简介

在股票交易中,找到最佳的买入和卖出时机是每个投资者的目标。在这个问题中,我们被给定一个数组 prices,其中每个元素代表一支股票在特定一天的价格。我们的任务是设计一个算法来计算在只进行一次交易(即买入后再卖出)的情况下,能够获得的最大利润。如果没有利润可图,我们应返回0。

算法分析

这个问题可以通过贪心算法来解决。贪心算法在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的。在这个问题中,贪心策略表现为:

  1. 跟踪最小价格:在遍历价格数组的过程中,我们持续跟踪到目前为止的最小价格。这是因为如果我们在某一天买入股票,我们希望这一天的价格是迄今为止的最低价格。

  2. 计算最大利润:在跟踪最小价格的同时,我们计算在当前价格卖出时能够获得的利润,并与之前计算的最大利润进行比较,保留最大的那个。

  3. 单次遍历:我们只需要遍历一次价格数组,就可以找到最大利润。

 

算法实现

以下是使用C++实现的算法:

#include <vector>
#include <algorithm> // 用于std::max函数

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size();
        if (n == 0) return 0; // 如果数组为空,没有交易可做,返回0

        int minPrice = prices[0]; // 初始化最小价格为数组的第一个元素
        int maxProfit = 0; // 初始化最大利润为0

        for (int i = 1; i < n; i++) {
            if (prices[i] < minPrice) {
                minPrice = prices[i]; // 更新最小价格
            } else {
                maxProfit = max(maxProfit, prices[i] - minPrice); // 更新最大利润
            }
        }

        return maxProfit; // 返回最大利润
    }
};

复杂度分析

  • 时间复杂度:O(n),其中 n 是数组 prices 的长度。我们只遍历了数组一次。
  • 空间复杂度:O(1),我们只使用了有限的额外空间。

结论

通过贪心算法,我们可以有效地解决“买卖股票的最佳时机”问题。这种方法简单且高效,适用于在单次交易中寻找最大利润的场景。在实际应用中,这种策略可以帮助投资者在股市中做出更明智的决策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值