尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

[特殊字符] LeetCode 123. 买卖股票的最佳时机 III(两次交易 | 状态机DP详解)

[特殊字符] LeetCode 123. 买卖股票的最佳时机 III(两次交易 | 状态机DP详解) 题目描述给定一个数组prices其中prices[i]表示第i天的股票价格。你最多可以完成两笔交易求最大利润。⚠️ 注意不能同时持有多笔交易必须先卖出再买入 思路分析核心这题的关键不是“找区间”而是把交易过程拆成状态我们最多交易 2 次对应 4 个关键状态状态含义buy1第一次买入后的最大利润sell1第一次卖出后的最大利润buy2第二次买入后的最大利润sell2第二次卖出后的最大利润 状态转移方程每天更新这 4 个状态buy1 max(buy1, -price) sell1 max(sell1, buy1 price) buy2 max(buy2, sell1 - price) sell2 max(sell2, buy2 price) 状态理解非常重要可以理解为一条链第一次买 → 第一次卖 → 第二次买 → 第二次卖每一步都在问 “我现在做这个操作能不能更赚钱” 初始化buy1 buy2 -prices[0]; sell1 sell2 0;✅ 完整 C 代码int maxProfit(int* prices, int pricesSize) { if (pricesSize 0) return 0; int buy1 -prices[0]; int sell1 0; int buy2 -prices[0]; int sell2 0; for (int i 1; i pricesSize; i) { if (-prices[i] buy1) buy1 -prices[i]; if (buy1 prices[i] sell1) sell1 buy1 prices[i]; if (sell1 - prices[i] buy2) buy2 sell1 - prices[i]; if (buy2 prices[i] sell2) sell2 buy2 prices[i]; } return sell2; } 示例解析输入[3,3,5,0,0,3,1,4]最优策略0 → 3 赚 3 1 → 4 再赚 3 总利润 6⚡ 时间复杂度时间复杂度O(n)空间复杂度O(1) 扩展面试必问这题其实是股票问题的“进阶模板”题号含义121只允许 1 次交易122无限次交易123最多 2 次交易188最多 k 次交易 本质是k 次交易的状态压缩 DP 一句话总结 把“买卖”当作状态而不是区间问题就简单了。
返回列表