给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: prices = [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]示例 2:
输入: prices = [1]
输出: 0状态机,初始化并维护三个状态
hold:当天持有股票
sale:当天出售股票
rest:当天未持有股票(可能是冷冻期或者正常未买入)
var maxProfit = function(prices) {
let hold = -prices[0];
let sale = -Infinity;
let rest = 0;
for (let i = 1; i < prices.length; i++) {
let prevHole = hold;
let prevSale = sale;
let prevRest = rest;
hold = Math.max(prevHole, prevRest - prices[i]);
sale = Math.max(prevSale, hold + prices[i]);
rest = Math.max(prevRest, prevSale)
}
return Math.max(sale, rest)
};