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

济南h5网站建设温州网站建设钢筋工

济南h5网站建设,温州网站建设钢筋工,wordpress酷炫插件,重庆重庆网站建设公司一个子数组问题,我们要使用线性dp,最好先考虑以i结尾,如果定义dp[i]为前i个数最大子数组乘积值 那么dp[i-1]就无法转移到dp[i]。因此我们先考虑dp[i]定义为以第i个数结尾的最大子数组乘积值。 53. 最大子数组和 最大子数组和是一个动态规划问…

a5450679cb8c4fcbb04d0d141383b943.png

一个子数组问题,我们要使用线性dp,最好先考虑以i结尾,如果定义dp[i]为前i个数最大子数组乘积值 那么dp[i-1]就无法转移到dp[i]。因此我们先考虑dp[i]定义为以第i个数结尾的最大子数组乘积值。

 53. 最大子数组和

最大子数组和是一个动态规划问题,定义dp[i]表示以nums[i]结尾的最大子数组和,那么dp[i]=max(dp[i-1]+nums[i],nums[i])。对于这里乘积最大子数组和,我们也有这样的想法,但是由于负负得正,如{-3,2,3,-2},dp[2]=6,nums[3]=-2,但是dp[3]不是-2,而应当乘以前面的-3。

记录前一个负数位置的动态规划

一个朴素的想法就是:

        记录前一个负数的位置,这样遍历到一个负数时,我们在前一个负数到这个负数之间的数都是≥0的,这样在遇到负数时的连乘最大值应当至少是前一个负数连乘到这个负数,而当 以 前一个负数的 前一个数为结尾的子数组乘积为正时,也应该考虑进去。这样负数的情况就考虑完了。当之前没有负数时,有0时dp[i]就是0,没有0时dp[i]就是该负数。

        当遇到的是一个正数,则只需要使用dp[i]=max(dp[i-1]*nums[i],nums[i]),因为以该正数结尾的最大连乘,要么是本身,要么以 前一个数结尾的子数组连乘为正*该正数。

class Solution {
public:int maxProduct(vector<int>& nums) {vector<int> dp(nums.size());int ans;ans=dp[0]=nums[0];int minus=-1;if(nums[0]<0) minus=0;int flag=0;//记录前一个负数到这个负数是否存在0for(int i=1;i<nums.size();++i){dp[i]=1;if(nums[i]==0) flag=1;if(nums[i]<0){if(minus>=0){//中间有0也应该是0if(minus>0&&dp[minus-1]>0)dp[i]=dp[minus-1]*nums[minus]*nums[i];else dp[i]=nums[minus]*nums[i];if(minus!=i-1) {if(dp[minus]<=0)dp[i]*=dp[i-1];else dp[i]*=dp[i-1]/dp[minus];}if(flag) dp[i]=0;}else dp[i]=nums[i];minus=i;flag=0;}else dp[i]=dp[i-1]>0?dp[i-1]*nums[i]:nums[i];if(dp[i]>ans) ans=dp[i];}//cout<<dp[nums.size()-2];return ans;}
};
//dp[i]表示以i结尾的子数组的乘积最大值

记录最大最小的动态规划

进阶的考虑:

        当遇到负数时,我们能不能让 以它前一个数结尾的连乘 负得更多,这样我们再乘上这个数就大的更多。

        当遇到正数时,我们依然让 以前一个数结尾的连乘 正的更多即可。

因此,我们可以保存一个最小值和最大值。

最小值让以第i个数结尾的子数组连乘最小,

最大值让以第i个数结尾的子数组连乘最大,

最小值的计算和最大值的计算,前一两者同时考虑就把正负给抵消掉了。

class Solution {
public:int maxProduct(vector<int>& nums) {int mx=nums[0];int mn=nums[0];int ans=nums[0];for(int i=1;i<nums.size();++i){int Max=mx,Min=mn;mx=max(max(Max*nums[i],Min*nums[i]),nums[i]);mn=min(min(Min*nums[i],Max*nums[i]),nums[i]);ans=ans>mx?ans:mx;}return ans;}
};

 

 

http://www.yayakq.cn/news/720275/

相关文章:

  • 营销企业网站制作网站推广平台怎么做
  • 网站站内交换链接怎么做做的好的网站欣赏
  • 如何做自己的项目网站进入网页版邮箱
  • 网站建设采用的技术网页qq登录每一天乐在沟通
  • 十堰微网站建设价格自己做的网站竞价好还是单页好
  • 专业简历制作网站有哪些做私单的网站
  • 网站建设和媒体渠道住房和城乡建设局网站职能
  • 山东青岛网站设计公司查询网站mx记录
  • 简洁大方的网站确定网站界面
  • 如何使用ftp上传网站益阳购物网站开发设计
  • 中山有哪些网站建立公司关键词排名哪里查
  • 网站建设工程属于科技档案吗个人网站可以做淘客
  • dplayer wordpresswordpress 副标题 seo
  • vs2017可以做网站吗网站建设的步骤教程视频教程
  • 成都本地网站建设眼科医院网站开发
  • 观点网站企业电话黄页
  • 网站维护与建设考试如何自行建设网站
  • 衡阳网站排名优化装修设计师之家官网
  • 企业型网站价目表wordpress 房产类模板
  • 佰联轴承网做的网站网站模板建站教程视频
  • 网站建设图片如何加载推广方式怎么写
  • 做网站基本要求广西建设职业技术学院贫困生网站
  • 医疗门户网站管理系统国外做农产品有名的网站
  • 小游戏网站自助建网站系统
  • 简述建设网站的基本流程内部网站管理办法
  • 北京赛车手机网站建设WordPress的分類顯示插件
  • 张艺兴粉丝做的网站搜网站关键词
  • 宁波做网站的企业uncode wordpress主题
  • 海洋公司做网站推广wordpress教育培训主题
  • 做公司网站需要几天平面设计培训费用一般是多少