122 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
题解
这道题贪心算法可以解,最简单的是只要是正收益,就加上,否则不加。那么就是比较前一个和当前值的diff,如果大于0,算上,否则不算。
整体代码
javascript
var maxProfit = function (prices) {
let total = 0
for(let i=1;i<prices.length;i++) {
if(prices[i] - prices[i-1] > 0) {
total += prices[i] - prices[i-1]
}
}
return total
}
同时我们还可以这么想,我们先买第一天的,如果后一天跌了,那么先卖出前一天,然后在买入今天的,如果涨了就不动,最后一天必须卖出。
javascript
var maxProfit = function (prices) {
//核心逻辑是,先买第一天的,如果后面不跌,就不卖,如果后面跌了,卖出前面的。同时买入当天的,最后一天必须全部卖出
let total = -prices[0]
for (let i = 1; i < prices.length; i++) {
if (prices[i] < prices[i - 1]) {
//如果下跌,把昨天的卖了
total += prices[i - 1]
//再把今天的买入
total -= prices[i]
}
//最后一天必须卖
if (i === prices.length - 1) {
total += prices[i]
}
}
return total
};