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

独立做网站前端数据seo推广软

独立做网站前端数据,seo推广软,网站建设怎么打开,郑州高端网站建设题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 参考链接:代码随想录 188.买卖股票的最佳时机IV 思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路&…

题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

参考链接:代码随想录

188.买卖股票的最佳时机IV

思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路,需要设计1+2k个状态,第一个不设置也可以。dp五部曲:dp数组,dp[i][0-2k],dp[i][0]表示无操作,dp[i][1]表示第一次持有的最大现金,dp[i][2]表示第一次不持有…dp[i][2k-1]表示第k次持有,dp[i][2k]表示第k次不持有;递推公式,类似上题,第i天第j次持有时,考虑第i-1天持有或不持有,dp[i][2j-1]=max(dp[i-1][2j-1],dp[i-1][2j-2]-prices[i]),第i天第j次不持有时,dp[i][2j]=max(dp[i-1][2j],dp[i-1][2j-1]+prices[i]);初始化,首先全部初始化为0,dp[i][0]始终为0,然后dp[0][2j-1]初始化为-prices[0],dp[0][2j]初始化为0,类似上题;遍历顺序,顺序遍历;举例略。时间复杂度O(nk)。

class Solution {
public:int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(2*k+1,0));for(int j=0;j<k;j++){//初始化dp[0][2*j+1]=-prices[0];}for(int i=1;i<prices.size();i++){for(int j=1;j<=k;j++){//第j次持有和第j次不持有dp[i][2*j-1]=max(dp[i-1][2*j-1],dp[i-1][2*j-2]-prices[i]);dp[i][2*j]=max(dp[i-1][2*j],dp[i-1][2*j-1]+prices[i]);}}return dp[prices.size()-1][2*k];}
};

注意cpp中数字和字母之间的乘号不能省略!否则报错。

309.最佳买卖股票时机含冷冻期

思路:本题可以多次买卖,加入了一天冷冻期,卖出后第二天不能买,需要仔细分析状态,有四个状态,状态一为持有股票,然后对于不持有股票的情况,要分开讨论,状态二为保持卖出股票(两天前就卖掉了已经度过冷冻期,或者一直就没操作),即可以随时买入股票,度过了冷冻期,状态三为当天卖出股票,状态四为冷冻期,即前一天卖出股票。如图所示:
在这里插入图片描述

和前几题相比,本题增加了一个今天卖出股票的状态,之前都没有,因为冷冻期之前一天只能是当天卖出的状态,需要和普通的不持有股票状态区分开来。dp五部曲:dp数组:dp[i][0-4]分别表示持有股票、保持卖出股票、当天卖出股票、冷冻期的最大现金;递推公式:dp[i][0],持有股票,前一天有三种情况,首先是本来就持有的dp[i-1][0],然后是冷冻状态或者保持卖出状态下买入,dp[i-1][1]-prices[i],dp[i-1][3]-prices[i],取max,dp[i][1]卖出状态,前一天要么本来就是保持卖出,dp[i-1][1],或者冷冻状态,dp[i-1][3],取max,注意不是当天卖的,故不需要+prices[i],dp[i][2]当天卖出,前一天必定是持有,dp[i][2]=dp[i-1][0]+prices[i],dp[i][3]冷冻期,前一天必定是卖出股票,dp[i][3]=dp[i-1][2];初始化,首先全部初始化为0,dp[0][0]=-prices[i],dp[0][1]直接思考想不出设置为什么合适,所以直接根据递推公式算,经过几次递推后必定为0,dp[0][2]和dp[0][3]也为0;遍历顺序,顺序遍历;举例略。时间复杂度O(n)。最后返回值为状态1,2,3取max。

class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(),vector<int>(4,0));dp[0][0]=-prices[0];for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],max(dp[i-1][1]-prices[i],dp[i-1][3]-prices[i]));dp[i][1]=max(dp[i-1][1],dp[i-1][3]);dp[i][2]=dp[i-1][0]+prices[i];dp[i][3]=dp[i-1][2];}return max(dp[prices.size()-1][1],max(dp[prices.size()-1][2],dp[prices.size()-1][3]));}
};

714.买卖股票的最佳时机含手续费

思路:本题又是无限次交易,只不过添加了手续费,因此比较容易,只需要在交易的时候计算现金的时候减去手续费就OK。dp五部曲:dp数组,dp[i][0]表示持有股票最大现金,dp[i][1]表示不持有股票最大现金;递推公式,dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]-fee),对于交易手续费,我们在买的时候扣除就行了,dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);初始化,dp[0][0]=-prices[i]-fee,其他都初始化为0;遍历顺序,顺序遍历;举例略。时间复杂度O(n)。手续费在卖的时候扣也可以。

class Solution {
public:int maxProfit(vector<int>& prices, int fee) {vector<vector<int>> dp(prices.size(),vector<int>{0,0});dp[0][0]=-prices[0]-fee;for(int i=1;i<prices.size();i++){dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]-fee);dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]);}return dp[prices.size()-1][1];}
};
http://www.zhongyajixie.com/news/32415.html

相关文章:

  • 佛山市网站建设公司推广品牌的策划方案
  • 西安360免费做网站百度网盘搜索引擎官方入口
  • 纯静态网站开发免费注册
  • 动态网站的实现过程推广信息怎么写
  • 百度免费网站申请小程序搭建教程
  • 哪家装修公司比较好的seo整合营销
  • 做彩票网站违法百度最新秒收录方法2023
  • 苹果做ppt模板下载网站武汉seo公司排名
  • 阿里云服务器可以做网站最近国际时事热点事件
  • 中山网站建设服务百度主页面
  • 关于加强政务网站建设的通知百度推广热线电话
  • 网站备案周期qianhu微建站
  • 公司做网站的人工智能培训一般多少钱
  • 网站管理系统图片色盲和色弱的区别
  • 购物优惠券网站怎么做信息流广告案例
  • 公司网站制作申请报告新网店怎么免费推广
  • 网站的开发技术谷歌搜索引擎google
  • 如何复制一个网站模板在线crm管理系统
  • dedecms 网站安全鸣蝉智能建站
  • 做湘菜的网站游戏推广员到底犯不犯法
  • 网站设计宽屏尺寸网站排名查询平台
  • 怎么自己制作app群排名优化软件
  • 但是打不开网页上海排名优化seo
  • 上海内贸网站建设seo技术顾问阿亮
  • 太原汽车网站建设找培训机构的app
  • 政府网站集约化建设项目外贸营销网站建设
  • 海珠建网站公司手机网站自助建站系统
  • zb533网站建设东莞seo黑帽培训
  • 大武口做网站的网站推广多少钱一年
  • 山东建设企业网站网络维护公司