非常straightforward的方法,只要后项比前向大,就把差值加进maxP。但是逻辑上违背了题目要求的不能在同一天又买又卖,只是数值是对的。
public int maxProfit(int[] prices) {
if(prices == null || prices.length == 0) return 0;
int i = 0;
int maxP = 0;
while(i < prices.length - 1) {
maxP = Math.max(prices[i+1] - prices[i] + maxP, maxP);
i++;
}
return maxP;
}
换一种逻辑上也正确的思路,找到递增的开始和递减的开始,prices[dec] - prices[inc] 就是买卖获利了,把所有这样的区间找出来相加就是max profit.
public static int maxProfit(int[] prices) {
if(prices == null || prices.length < 2)
return 0;
int i = 0;
int maxP = 0;
while(i < prices.length - 1){
int buy=0;
int sell=0;
while(i < prices.length-1 && prices[i+1] < prices[i]) i++;
buy = i;
while(i < prices.length-1 && prices[i+1] >= prices[i]) i++;
sell = i;
maxP += prices[sell] - prices[buy];
}
return maxP;
}