题目:
分析:买股票怎么买赚钱最多(贪心)。有可能陷入一个误区,从最低的价格买从最高的价格卖,看似没错,其实不一定,有可能最高的价格在最低的价格之前,那么就没办法做到从最低的价格买从最高的价格卖,但不能这样买不代表不能赚钱。如何做到赚钱最多这个问题有意义的话那么价格一定要是有波动的,如果一直上升那从头买从尾卖即可,如果一路下跌那么不买即可,既然价格有波动的话我们可以把问题转换一下,求价格之间的差值,然后从差值里求最大连续子序和,问题就转换了。
currentMax ,soFarMax分别记录当前位置的和最大值以及迄今为止的和最大值,先更新currentMax 再根据currentMax 更新soFarMax,soFarMax若比currentMax大,则暂时不买currentMax那天的股票,往后看再考虑
代码
class Solution {
public int maxProfit(int[] prices) {
if(prices == null || prices.length == 0){
return 0;
}
int[] diff = new int[prices.length-1];
for(int i = 0; i < diff.length; i++){
diff[i] = prices[i+1] - prices[i];
}
//当前位置的和最大值
int currentMax = 0;
//迄今为止的和最大值
int soFarMax = 0;
for(int i = 0; i < diff.length; i++){
currentMax = Math.max(currentMax+diff[i], diff[i]);
//soFarMax若比currentMax大,则暂时不买currentMax那天的股票,往后看再考虑
soFarMax = Math.max(currentMax, soFarMax);
}
if(soFarMax < 0){
return 0;
}
return soFarMax;
}
}