如果想到其实最终利润是可以分解的,那么本题就很容易了!
假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。
相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。
此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!
只收集正利润
把所有正利润加起来
class Solution {
public int maxProfit(int[] prices) {
int result = 0;
for(int i=0; i<prices.length-1; i++){
result += Math.max(prices[i+1]-prices[i],0);
}
return result;
}
}
时间复杂度:O(n),其中 n 为数组的长度。我们只需要遍历一次数组即可。
空间复杂度:O(1)。只需要常数空间存放若干变量。
?