题目:
解题:
思路:121题和122题的同步升级的。121题的思路是说。在一个数组中,在最低点买入,最高点卖出(仅一次)。122题升级的是,买卖股票可以多次。那么我把121题的思路带进。也就是,在数组中拆分出多个小数组,每一个小数组就是一个121题。
那么问题是,怎么拆分?
我的理解是:在从索引0开始,只要是个顺序的增长,一旦发现当前到某个索引时,不能保证数组顺序,那么开始拆分。把顺序的那部分当做一个小数组,取出小数组的索引0和length-1做差值。再往后继续寻找
public int maxProfit(int[] prices) {
//最小值 默认索引0
int min = prices[0];
//最大值 默认索引0
int max = prices[0];
//总差值
int maxTotal = 0;
for (int i = 1; i < prices.length; i++) {
int price = prices[i];
/**
* 当前值 < 最大值
* 那么说明已经到了 从最小值(索引) - 最大值(索引)
* 这个区间范围内的最大差值。
*/
if(price < max){
maxTotal += max - min;
//替换最大最小值,相当于从来一次开始行为(索引0开始)
min = price;
max = price;
}else {
//当前值 > 最大值
//继续往后面寻找最大值
max = price;
//特殊情况,如果最大值是索引最后一个
if(i == prices.length - 1){
maxTotal += max - min;
}
}
}
return maxTotal;
}