每天结束,一共有5种状态:
没有操作(可以不记录,收益为0)
buy1:第一次买入
sell1:第一次卖出(完成一次交易)
buy2:第二次买入
sell2:第二次卖出(完成两次交易)

状态转移:
buy1 = max(buy1, -prices[i]);
sell1 = max(sell1, buy1 + prices[i]);
buy2 = max(buy2, sell1 - prices[i]);
sell2 = max(sell2, buy2 + prices[i]);

因为当天买入再卖出收益为0,所以4个变量在更新的时候不需要中间变量辅助,如果最大收益是一天交易,那么也会因为当天买入卖出转移到sell2,所以最后的结果为sell2。

class Solution {public:int maxProfit(vector<int>& prices) {int n = prices.size();int buy1 = -prices[0], buy2 = -prices[0], sell1 = 0, sell2 = 0;for (int i = 1; i < n; ++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;}
};

动态规划 - 买卖股票的最佳时机 III相关推荐

  1. 动态规划---买卖股票的最佳时机

    说明 股票问题算是动态规划问题中的一个小分支,这里单独写一篇文章介绍.至于动态规划基础问题和详细的处理步骤我在我的另一篇文章中详细介绍过.具体解决步骤请移步观看--动态规划基础篇.如果想了解01背包问 ...

  2. 123. 买卖股票的最佳时机 III ( 三维dp )

    LeetCode:123. 买卖股票的最佳时机 III 之前的含手续费定义了两个状态(持股与不持股), 含冷冻期定义了三个状态(持股, 不持股冷冻期, 不持股非冷冻期), 都是二维数组. 本题除了持股 ...

  3. 算法训练第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

    动态规划part11 123.买卖股票的最佳时机III 题目描述 思路 拓展 188.买卖股票的最佳时机IV 题目描述 思路 易错点 123.买卖股票的最佳时机III 题目链接:123.买卖股票的最佳 ...

  4. 算法训练Day50 | LeetCode123. 买卖股票的最佳时机III(最多买卖2次);LeetCode188. 买卖股票的最佳时机IV(最多买卖K次)

    目录 LeetCode123. 买卖股票的最佳时机III 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 LeetCode188. 买卖股票的最佳时机IV 1. 思路 2. 代码实现 ...

  5. 力扣 -- 123. 买卖股票的最佳时机 III

    题目链接:123. 买卖股票的最佳时机 III - 力扣(LeetCode) 下面是用动态规划的思想解决这道题的过程,相信各位小伙伴都能看懂并且掌握这道经典的动规题目滴. 参考代码: class So ...

  6. lintcode:买卖股票的最佳时机 III

    买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 样例 给出一个样例数组 [4,4,6,1,1,4,2 ...

  7. 动态规划-买卖股票的最佳时机 专题

    动态规划-买卖股票的最佳时机 专题 买卖股票的最佳时机(可以用贪心) 力扣题目链接 因为只能买卖一次. dp[i][j]数组的含义:第 i 天状态为 j 时的最大现金. 递推公式: 设dp[i][0] ...

  8. 【第50天| ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV 】

    123.买卖股票的最佳时机III class Solution {public:int maxProfit(vector<int>& prices) {vector<int& ...

  9. 第43天| 123.买卖股票的最佳时机III、 188.买卖股票的最佳时机IV

    1.题目链接:123. 买卖股票的最佳时机 III 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易 ...

最新文章

  1. 也有个自由职业梦?日本码农辞职一年后:独立工程师太难了
  2. JavaScript实现浏览器菜单的一些功能
  3. Python 连接redis密码中特殊字符问题
  4. 超图Cesium鼠标事件处理
  5. 基于JavaWeb实现的研究室综合系统
  6. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数
  7. HP LaserJet P1008打印机安装
  8. GEE批处理自动下载遥感影像
  9. 海康威视错误代码说明(六)(错误代码:82~825)
  10. 【转】win10更改C盘中用户文件夹名
  11. 人像柯达金胶片效果调色
  12. etl构建数据仓库五步法_ETL构建数据仓库五步法
  13. 上海高二物理公式整理
  14. Python平板电脑数据分析-课程大作业-部分源码
  15. 华硕ROG冰刃5评测
  16. oracle数据库之统计分析(方差、标准差、协方差)
  17. 经典卷积神经网络(CNN)图像分类算法详解
  18. 第二证券|卡塔尔给体育烧的钱,不止世界杯
  19. 今日种种,譬如今日生(2018总结)
  20. VC-VQA: Visual Calibration Mechanism for Visual Question Answering (VQA的视觉校准机制)

热门文章

  1. linux命令(8)wc
  2. 开源通用爬虫框架YayCrawler-运行与调试
  3. unix文件权限判断
  4. C# 委托(Delegate) 事件(Event)应用详解
  5. 分块查询 缓解内存开销
  6. html中显示变量的数组,javascript如何判断变量是不是数组?
  7. [网络安全自学篇] 十一.虚拟机VMware+Kali安装入门及Sqlmap普及
  8. [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
  9. HarmonyOS之AI能力·二维码的生成和使用
  10. tqdm: ‘module‘ object is not callable