在股票市场,预测股票价格走势是一个永恒的话题。对于投资者来说,找到买入和卖出的最佳时机至关重要,这关系着利润的多少甚至能否盈利。将详细介绍一种用来解决该问题的算法:买卖股票的最佳时机算法。
问题描述
给定一个股票价格数组 prices
,其中 prices[i]
表示第 i
天股票的价格。假设只能进行一笔交易,即只能买入一次并卖出一次,请找出能够获得最大利润的买入和卖出时机。
算法步骤
买卖股票的最佳时机算法是一个贪心算法,其主要思想是:在遍历股票价格数组时,不断更新两个关键变量:
min_price
:记录到目前为止遇到的最低股票价格。max_profit
:记录到目前为止获得的最大利润。算法步骤如下:
min_price
为 prices[0]
,max_profit
为 0
。prices
:
prices[i]
小于 min_price
,则更新 min_price
为 prices[i]
。profit
,即 prices[i] - min_price
。profit
大于 max_profit
,则更新 max_profit
为 profit
。max_profit
。代码实现
Python 代码实现:
```python
def max_profit(prices):
if not prices:
return 0
min_price = prices[0]max_profit = 0
for price in prices:
if price < min_price:
min_price = price
else:
max_profit = max(max_profit, price - min_price)
return max_profit
```
算法分析
prices
的长度。算法需要遍历整个数组一次。min_price
、max_profit
和当前遍历到的股票价格,因此空间复杂度为常数。示例
给定股票价格数组 prices = [7, 1, 5, 3, 6, 4]
,算法将找到最佳买入和卖出时机:
最大利润为 6 - 1 = 5 元。
扩展
买卖股票的最佳时机算法可以扩展到处理更多复杂的情况,例如:
这些扩展算法会涉及到更高级的动态规划或机器学习技术。