解题思路:
方法一:滑动窗口
时间复杂度:O(n)
方法二:迭代更新
每当有更低价时更新买价,
每当有更高价时更新卖价,
期间更新每一次的买价和卖价的差价
另一方面,为了避免用“今天的低价”购买“昨天的高价”,在有更低价时同时更新买价和卖价(继而当天的买卖差价为0)
最后就变成了:
每当有更低价时同时更新买价和卖价
每当有更高价时更新卖价,
期间更新每一次的买价和卖价的差价
时间复杂度:O(n)
提交代码:滑动窗口
class Solution{
public int maxProfit(int[] prices) {
int curMax=0,res=0;
for(int i=1;i<prices.length;i++) {
curMax=Math.max(0, curMax+prices[i]-prices[i-1]);
res=Math.max(res, curMax);
}
return res;
}
}
运行结果:

提交代码:基础迭代
class Solution{
public int maxProfit(int[] prices) {
int res=0,min=Integer.MAX_VALUE,max=Integer.MAX_VALUE;
for(int price : prices) {
if(price<min) {
min=price;max=price;
}else if(price>max){
max=price;
res=Math.max(res, max-min);
}
}
return res;
}
}
运行结果:

本文介绍了一种计算股票买卖最大利润的算法,通过滑动窗口和迭代更新的方法,实现了O(n)的时间复杂度。详细解释了如何在遇到更低价格时更新买入价格,并在更高价格时更新卖出价格,同时避免使用今天的低价购买昨天的高价。提供了两种解决方案的代码实现。
679

被折叠的 条评论
为什么被折叠?



