给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
思考过程:
遍历一次数组,只要当前数字比前一个大就将他们的差值存在利润max中,这样max就记录了整个数组中总的利润
代码实现:
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let max = 0
for(let i = 1; i < prices.length; i++){
if(prices[i - 1] < prices[i]){
max += prices[i] - prices[i - 1]
}
}
return max
};
贪心算法:
贪心算法也可以解决这个问题.依然是遍历整个数组,如果后者-前者是正数,就加到利润中去,否则利润是0.其实整体思想和上面的思想大同小异,甚至可以理解是同一个想法。
代码实现:
/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
let max = 0
for(let i = 1; i < prices.length; i++){
max += Math.max(0, prices[i] - prices[i - 1])
}
return max
};