简介
在股票交易中,找到最佳的买入和卖出时机是每个投资者的目标。在这个问题中,我们被给定一个数组 prices
,其中每个元素代表一支股票在特定一天的价格。我们的任务是设计一个算法来计算在只进行一次交易(即买入后再卖出)的情况下,能够获得的最大利润。如果没有利润可图,我们应返回0。
算法分析
这个问题可以通过贪心算法来解决。贪心算法在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的。在这个问题中,贪心策略表现为:
-
跟踪最小价格:在遍历价格数组的过程中,我们持续跟踪到目前为止的最小价格。这是因为如果我们在某一天买入股票,我们希望这一天的价格是迄今为止的最低价格。
-
计算最大利润:在跟踪最小价格的同时,我们计算在当前价格卖出时能够获得的利润,并与之前计算的最大利润进行比较,保留最大的那个。
-
单次遍历:我们只需要遍历一次价格数组,就可以找到最大利润。
算法实现
以下是使用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),我们只使用了有限的额外空间。
结论
通过贪心算法,我们可以有效地解决“买卖股票的最佳时机”问题。这种方法简单且高效,适用于在单次交易中寻找最大利润的场景。在实际应用中,这种策略可以帮助投资者在股市中做出更明智的决策。