题目描述:
给定一个数组,它的第 i
个元素是一支给定的股票在第 i
天的价格。你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票。设计一个算法来计算你所能获取的最大利润。
解题思路:
这个问题的主要解决方案是使用一次遍历,设置两个变量:minprice
和 maxprofit
,分别表示到目前为止所遇到的最小股票价格和最大可能的利润。
minprice
:初始化为数组的第一个元素,用来追踪当前所遇到的最小价格,我们始终以最低价格买入股票;maxprofit
:初始化为0,表示最大可能利润。在遍历过程中,我们使用当前价格减去最小价格,来试图获取更高的利润;
遍历过程中,对于每一个价格,我们首先检查是否需要更新 minprice
,即当前价格比 minprice
更低,如果是,我们更新 minprice
。然后我们检查卖出股票能否获得更高的利润,即当前价格减去 minprice
是否大于 maxprofit
,如果是,我们更新 maxprofit
。
以下是代码的详细注释:
class Solution {
public int maxProfit(int[] prices) {
int maxprofit=0; // 初始化最大利润为0
int minprice=prices[0]; // 初始化最小价格为数组第一个元素
// 遍历股票价格
for(int price:prices){
// 更新最小价格
minprice=Math.min(minprice,price);
// 检查卖出股票能否获得更高的利润
maxprofit=Math.max(maxprofit,price-minprice);
}
// 返回最大利润
return maxprofit;
}
}