算法列表

309. 买卖股票的最佳时机含冷冻期 中等

布莱克2026-04-02 10:57数学

问题:

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

  • 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 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)
};


assistant