function maxProfit(prices: number[]): number { const cache: number[][][] = Array(prices.length) .fill(0) .map(() => [ [NaN, NaN], [NaN, NaN], ]); function backtrack(day: number, status: number, freeze: boolean): number { // base case if (day >= prices.length) { return 0; } // 是否是冷冻期 if (freeze) { return backtrack(day + 1, status, !freeze); } // 命中缓存 if (!Number.isNaN(cache[day][status][0])) { return cache[day][status][0]; } if (status === 0) { // 非持有状态 cache[day][status][0] = Math.max( -prices[day] + backtrack(day + 1, (status + 1) % 2, false), backtrack(day + 1, status, false) ); } else { // 持有状态 cache[day][status][0] = Math.max( prices[day] + backtrack(day + 1, (status + 1) % 2, true), backtrack(day + 1, status, false) ); } return cache[day][status][0]; // make progress } return backtrack(0, 0, false);}