使用动态规划的解法,空间复杂度O(2*2)如果交易k次则为O(2*k),时间复杂度O(2n),交易k次为O(n*k),

因此本题实际上可以退化为买卖一次的情况:去掉buy2和sell2,即leetcode121;   以及进化为买卖k次的情况,即状态变量增加为k个buy和sell,即leetcode188

初始化buy[k]=-∞,sell[k]=0;具体原理如下:

class Solution {
public:int maxProfit(vector<int>& prices) {//当只能持有1股时题目可以认为是一个二维的图计算递推,定义buy1,sell1,buy2,sell2,表示第i天(i为下标)第1或2次买入卖出//定义状态转移,见程序//为了能够递推需要状态初值,考虑第0天buy1肯定为买入第0天,需要让-price在任何情况下都大于buy1,因此buy1初值为-∞//sell1的状态至少是当天买入并卖出,因此最小为0,又因为只要大于0就应该选择大于0的方案,综合两种情况应该赋值为0,同理buy2和sell2int len=prices.size();if(len<=1) return 0;int sell1=0,sell2=0,buy1=INT_MIN,buy2=INT_MIN;int res=0;for(int price:prices){buy1=max(buy1,-price);sell1=max(sell1,buy1+price);buy2=max(buy2,sell1-price);sell2=max(sell2,buy2+price);}return sell2;}
};

转载于:https://www.cnblogs.com/joelwang/p/10865258.html

leetcode 123. 买卖股票的最佳时机 III相关推荐

  1. LeetCode 123. 买卖股票的最佳时机 III(动态规划)

    1. 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买 ...

  2. 107. Leetcode 123. 买卖股票的最佳时机 III (动态规划-股票交易)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i] 表示的是在第i天可以获取的最大利润,每天会有持有股票和不持有股票两种状态,这个是 第二维度,还是用0和1表示. 而对于每一种状态,这里还会有交易 ...

  3. leetcode 123. 买卖股票的最佳时机 III(dp)

    给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的 ...

  4. LeetCode 123. 买卖股票的最佳时机 III(Best Time to Buy and Sell Stock III)

    题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必须在再次购买 ...

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

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

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

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

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

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

  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. JSTL标签库学习笔记
  2. 只知道用它打印了Hello World,除此之外你了解多少呢?
  3. 本构二次开发 c语言,umat二次开发超弹性本构.doc
  4. 2019北邮计算机考研大纲,2019年北京邮电大学802电子电路考研大纲
  5. 基于注解的方式装配bean
  6. 探讨ASP.NET 2.0中的Web控件改进技术(2)
  7. python操作hbase,Python操作Hbase
  8. Java High CPU故障排除指南–第1部分
  9. latex 幻灯片演示模板
  10. vue项目打包:npm run build 进程卡死
  11. linux下oracle中文乱码问题的解决
  12. centos7邮件服务器SSL配置
  13. js判断复选框是否被选中
  14. java 每隔一小时运行_每隔一小时执行一次 Full GC 分析排查
  15. linux交叉编译libnet,交叉编译samba(mipsel-linux) samba-3.3.3.tar.gz
  16. LZY的游戏(YYOJ)
  17. ubuntu安装gef,pwndbg,peda
  18. matlab pi表示,matlab中pi是什么意思
  19. Android apk 安全措施详细说明(签名、混淆、加固、H5安全方案)
  20. 【本周Python热点回顾】画一棵漂亮的樱花树,Python3*和**运算符,Python入门,这就是Python3.8么,i了

热门文章

  1. phpstorm xdebug配置
  2. 安卓手机关闭底部键盘灯的方法(htc G11亲测有效)
  3. ASP.NET应用程序性能测试
  4. srcElement
  5. 安装PowerDesigner造成Office2007鼠标无法正常使用
  6. storm-hbase jar包中的bolt节点源码解析
  7. windows media services 2008外网无法访问
  8. row_number() over(partition by order by )使用说明书
  9. Rails Minitest style 指南
  10. python decimal_python学习笔记一