当前位置: 首页 > news >正文

网站建设孝感云网站7china

网站建设孝感,云网站7china,wordpress菜单图教,自己做个微信小程序题目1#xff1a;123 买卖股票的最佳时机Ⅲ 题目链接#xff1a;买卖股票的最佳时机Ⅲ 对题目的理解 prices[i]表示股票在第i天的价格#xff0c;最多可以完成两笔交易#xff0c;不能同时进行多笔交易 可以买卖一次#xff0c;两次#xff0c;也可以不买卖 动态规划…题目1123 买卖股票的最佳时机Ⅲ 题目链接买卖股票的最佳时机Ⅲ 对题目的理解 prices[i]表示股票在第i天的价格最多可以完成两笔交易不能同时进行多笔交易 可以买卖一次两次也可以不买卖 动态规划 动规五部曲 1dp数组及下标i的含义 dp[i][0]  不操作(可有可无)股票的最大现金 dp[i][1]  第一次持有股票的最大现金 dp[i][2]  第一次不持有股票的最大现金 dp[i][3]  第二次持有股票的最大现金 dp[i][4]   第二次不持有股票的最大现金 不持有股票现金的状态一定比持有股票的现金多第二次不持有一定包含第一次不持有的钱 最终求解 dp[prices.size()-1][4] 2递推公式 dp[i][0] dp[i-1][0] dp[i][1] dp[i-1][1]  前一天已经持有 dp[i][1] dp[i-1][0]-prices[i]   第i天买入,前一天不操作 dp[i][1] max(dp[i-1][1]dp[i-1][0]-prices[i]) dp[i][2] dp[i-1][2]  前一天不持有 dp[i][2] dp[i-1][1]prices[i]    第i天卖出 前一天持有 dp[i][2] max(dp[i-1][2]dp[i-1][1]prices[i]) dp[i][3] dp[i-1][3]  前一天已经持有 dp[i][3] dp[i-1][2] -prices[i]  第i天买入但是因为是第二次买入所以应该是在第一次卖出的基础上减去第i天的股票价格 dp[i][3] max(dp[i-1][3]dp[i-1][2]-prices[i]) dp[i][4] dp[i-1][4]  前一天不持有 dp[i][4] dp[i-1][3] prices[i]  第i天卖出但是因为是第二次卖出所以应该在第二次买入的基础上加上第i天的股票价格 dp[i][4] max(dp[i-1][4]dp[i-1][3]prices[i]) 3dp数组初始化 从递推公式可以看出i的状态由i-1的状态决定所以初始化dp[0] dp[0][0]0 dp[0][1]-prices[0] dp[0][2]0(同一天买卖) dp[0][3]-prices[0](第二次又买入了) dp[0][4]0第二次又卖出了 4遍历顺序 从递推公式可以看出i的状态由i-1的状态决定所以从小到大遍历 for(i1;iprices.size();i)  注意从1开始 5打印dp数组 代码 class Solution { public:int maxProfit(vectorint prices) {//定义dp数组vectorvectorint dp(prices.size(),vectorint(5));//初始化dp数组dp[0][0] 0;//不操作dp[0][1] -prices[0];//第一次持有股票dp[0][2] 0;//第一次不持有股票dp[0][3] -prices[0];//第二次持有股票dp[0][4] 0;//第二次不持有股票for(int i1;iprices.size();i){dp[i][0] dp[i-1][0];dp[i][1] max(dp[i-1][1],dp[i-1][0]-prices[i]);dp[i][2] max(dp[i-1][2],dp[i-1][1]prices[i]);dp[i][3] max(dp[i-1][3],dp[i-1][2]-prices[i]);dp[i][4] max(dp[i-1][4],dp[i-1][3]prices[i]);}return dp[prices.size()-1][4];} }; 时间复杂度O(n)空间复杂度O(n × 5) 不使用dp[i][0]这个数组直接将dp[i][0]相关的部分注释掉即可 代码 class Solution { public:int maxProfit(vectorint prices) {//定义dp数组vectorvectorint dp(prices.size(),vectorint(5));//初始化dp数组// dp[0][0] 0;//不操作dp[0][1] -prices[0];//第一次持有股票dp[0][2] 0;//第一次不持有股票dp[0][3] -prices[0];//第二次持有股票dp[0][4] 0;//第二次不持有股票for(int i1;iprices.size();i){// dp[i][0] dp[i-1][0];dp[i][1] max(dp[i-1][1],-prices[i]);dp[i][2] max(dp[i-1][2],dp[i-1][1]prices[i]);dp[i][3] max(dp[i-1][3],dp[i-1][2]-prices[i]);dp[i][4] max(dp[i-1][4],dp[i-1][3]prices[i]);}return dp[prices.size()-1][4];} }; 题目2买卖股票的最佳时机Ⅳ 题目链接买卖股票的最佳时机Ⅳ 对题目的理解 prices[i]是某支股票在第i天的价格最多可以完成k笔交易不能同时参与多笔交易 动规五部曲 1dp数组及下标i的含义 dp[i][j]:第i天的状态为j持有股票奇数不持有股票偶数所拥有的最大现金j大于等于0小于等于2k 最终求解dp[prices.size()-1][2k] 2递推公式 for(j0;j2k-1;j2)  //j控制第几次买卖 第j次持有  dp[i][j1] max(dp[i-1][j1],dp[i][j]-prices[i]); 第j次不持有  dp[i][j2] max(dp[i-1][j2],dp[i][j1]prices[i]); 3dp数组初始化 根据递推公式j为奇数表示持有for(int j1;j2k;j2)  dp[0][j]-prices[0] 4遍历顺序 根据递推公式从小到大遍历 5打印dp数组 代码 class Solution { public:int maxProfit(int k, vectorint prices) {//定义dp数组vectorvectorint dp(prices.size(),vectorint(2*k1));//初始化dp数组for(int j1;j2*k;j2){//j为奇数下标时全为-prices[0],j是下标应不超过2k1dp[0][j]-prices[0];} //递推for(int i1;iprices.size();i){for(int j0;j2*k-1;j2){//将j代入j2,2k-222k//持有dp[i][j1]max(dp[i-1][j1],dp[i-1][j]-prices[i]);//不持有dp[i][j2]max(dp[i-1][j2],dp[i-1][j1]prices[i]);}}return dp[prices.size()-1][2*k];} }; 时间复杂度: O(n * k)其中 n 为 prices 的长度空间复杂度: O(n * k)
http://www.pierceye.com/news/719733/

相关文章:

  • 奉贤网站建设网站制作金融企业如何做好网络推广
  • 范湖网站建设团队建设银行激活网站
  • 旅游网站开发网站设计报告书邢台旅游景点大全排名 免费
  • 如何创建div做网站推荐佛山伦教网站设计
  • 建设电子商务网站前的市场分析网站后台ftp
  • 华丽的网站模板律所网站建设
  • 网站 管理系统搜索关键词的方法
  • 网站桥页也叫设计班级网站建设
  • 安庆网站建设工作室方维网络科技有限公司
  • 手机网站开发利用流程做网盟行业网站的图片广告的销售
  • 厦门建公司网站怎样自做网站
  • 兰州市网站建设公司无锡上海网站建设
  • 轻骑铃木摩托车官网资源专业网站优化排名
  • 做电影网站赚钱吗中企网站建设
  • 罗源网站建设免费建网站 步骤
  • 哪些网站做简历合适wordpress校园
  • 网站子目录怎么做国内做的比较好的二手网站
  • 短链生成网站html模板免费十个网页
  • 图跃企业网站建设seo提供服务
  • 厦门市建设管理协会网站发帖效果好的网站
  • 手机商城网站制作网页设计与制作的岗位职责
  • 教学网站系统流程图wordpress激活主题
  • 北京房地产网站建设做app还是做微网站好
  • 网站建设的整个流程管理咨询公司网站
  • 长沙网站建设有限公司怎么做网站赚大钱
  • 找做网站页的在哪找沭阳建设局网站
  • 私人做网站有什么用不断加强门户网站建设
  • WordPress简单百度站长插件使用cms建设网站安全吗
  • 响水做网站价格余江网站建设
  • 好的免费个人网站网站建设所需要的材料