class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
int buy1 = -prices[0];
int sell1 = 0;
int buy2 = -prices[0];
int sell2 = 0;
for(int i = 1;i<prices.size();i++){
// 选择在买入价格更低的那一天买入
buy1 = max(buy1,-prices[i]);
// 如果在这一天卖出获得的利润更大,那么在这一天卖出
sell1 = max(sell1,buy1+prices[i]);
// 第二次买入建立在第一次的基础上,如果第二次买入与第一次重合,那么就只进行以此交易,如果不重合,那么选择第二次 中 最 好的一个
// 第二次买入时所采取的成本最小的一天(已经加入了买卖第一次产生的利润),这时已经排除了,当天买当天买,因为没有意义
buy2 = max(buy2,sell1-prices[i]);
// 选择第二次卖出的最佳时机
sell2 = max(sell2,buy2+prices[i]);
}
return sell2;
}
};
LeetCode; 123.买股票的最佳时机;标签动态规划
该代码实现了一个C++函数,计算给定股价数组中两次交易能获得的最大利润。它使用动态规划策略,考虑两种状态:第一次交易完成后的状态和第二次交易完成后的状态。通过遍历股价,不断更新最优买入和卖出价格,最终得出最大利润。
摘要由CSDN通过智能技术生成