贪心算法
无限次买卖,计算出最大利润
这个算法的理解就是:
如果遇到一个递增的数组,那么我可以在同一天卖出,然后买进(可以看第二个测试用例),每天卖出(赚取前一天的利润),然后买进(为明天做准备)
如果遇到递减的部分了,那么就不买进了,因为受到了prices[i] > prices[i - 1]的制约,对于[7,1,5,3,2,6,4]测试用例而言,那么第二次买进的时机是2块的时候,而不是3块(找到谷底)
var maxProfit = function (prices) {
let profit = 0
for (let i = 1; i < prices.length; ++i) {
if (prices[i] > prices[i - 1]) {
profit += (prices[i] - prices[i - 1])
}
}
return profit
};
-
时间复杂度: O(n),其中 n 是价格数组的长度,我们只需要遍历一次数组。
-
空间复杂度: O(1),只需要常数的额外空间。