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

网站的域名可以更改吗阿里云域名查询和注册

网站的域名可以更改吗,阿里云域名查询和注册,今日新闻最新头条10条简短,建设一个网站的流程.个人主页:敲上瘾-CSDN博客 动态规划 基础dp:基础dp——动态规划-CSDN博客多状态dp:多状态dp——动态规划-CSDN博客 目录 一、解题技巧 二、最大子数组和 三、乘积最大子数组 四、最长湍流子数组 五、单词拆分 一、解题技巧 区分子数组&…

个人主页:敲上瘾-CSDN博客

动态规划

  • 基础dp:基础dp——动态规划-CSDN博客
  • 多状态dp:多状态dp——动态规划-CSDN博客

目录

一、解题技巧

二、最大子数组和

三、乘积最大子数组

四、最长湍流子数组

五、单词拆分


一、解题技巧

区分子数组(子串)与子序列:

  • 子数组(子串):在数列中的一段连续的元素组成的新数列,中间不可间断。
  • 子序列:在数列中从左往右依次挑选出元素组成的新数列,或者说在数列中随意删除一些元素后,剩下的元素组成的新数列。

用动态规划做子数组类的题时,对于状态表示我们可以直接设:

  • dp[i]为以i元素结尾的子数组的... ... 

        后面就根据具体的题目要求填写,可能是子数组的和或者子数组的积等等,无论如何都可以以i元素结尾的子数组为研究对象去思考问题,如果解决不了就尝试增加状态,但研究对象不要改变。如果还解决不了那么再考虑改变或增加研究对象。

二、最大子数组和

状态表示

如上技巧所述,我们直接设状态转移方程:

  • dp[i]表示:以i位置结尾的子数组的最大和。

接下来只需要去尝试是否能写出正确的状态转移方程,如果能那么状态表示就是对的。

状态转移方程:

以i位置结尾的子数组我们可以分为两种:

  1. nums[i]单独构成一个子数组
  2. nums[i]和以i-1结尾的最大和子数组组合成的子数组。

        那么这个以i-1结尾的最大子数组的值就是一个重复子问题,我们假设在前面已经计算过了,即dp[i-1],然后需要注意两种情况只能取一种。那么:

  • dp[i] = max(nums[i]+dp[i-1],nums[i])

初始化

初始化的目的主要有两个:

  • 保证填表的时候不越界。
  • 保证填表的正确性。

        因为这里有i-1,所以如果从0开始填表可能会越界,通常有两种解决方案:

        方法一:把dp[0]初始化(即dp[0]=nums[0]),然后从dp[1]位置开始填表(即从nums[1]位置开始记录)。

        方法二:开辟一个n+1的空间(n=nums.size()),让dp[0]=0(需要根据具体情况具体分析),然后从dp[1]位置开始填写,而dp[1]记录的是nums[0]的情况,也就是错开一位进行记录,所以需要注意映射关系。

        这题看似方法一更简洁,但对于其他题可能需要做更复杂的边界判断。所以在做动规题时更推荐使用方法二来解决边界问题。

填表顺序

        从左往右。

返回值

        dp表中的最大值。

代码示例:

class Solution 
{
public:int maxSubArray(vector<int>& nums){int n=nums.size(),ret=INT_MIN;vector<int> dp(n+1);for(int i=1;i<n+1;i++){dp[i]=max(nums[i-1],nums[i-1]+dp[i-1]);ret=max(ret,dp[i]);}    return ret;}
};

三、乘积最大子数组

状态表示

同样的我们假设状态表示为:

        dp[i]表示:以i位置结尾的子数组的最大乘积。

        那么状态转移方程dp[i]=max(dp[i-1]*nums[i],nums[i]),我们想一想这样对吗?比如dp[i-1]*nums[i],nums[i]乘以一个最大积的子数组就是最大吗?

        如果nums是一个负数不就变成最小乘积了吗,反之nums[i]小于0时乘以一个最小的数才能成为最大积。

        所以当nums[i]小于0时我们需要知道以i-1结尾的子数组的最小积。

所以状态表示为:

  • f[i]表示:以i位置结尾的子数组的最乘积。
  • g[i]表示:以i位置结尾的子数组的最乘积。

状态转移方程

  • nums[i]>=0:
    • f[i] = max(f[i-1]*nums[i],nums[i])
    • g[i] = min(g[i-1]*nums[i],nums[i])
  • nums[i] < 0:
    • f[i] = max(g[i-1]*nums[i],nums[i])
    • g[i] = min(f[i-1]*nums[i],nums[i])        

或:

  • f[i]=max(nums[i],max(nums[i]*f[i-1],nums[i]*g[i-1]));
  • g[i]=min(nums[i],min(nums[i]*f[i-1],nums[i]*g[i-1]));

初始化

        与上一题相同,为防止越界我们给两个dp表都多开辟一个空间,映射关系错开一位。

        然后把两个dp表都初始化为1,因为这里是乘法,如果使用默认的0值那么这个结果都是0。

注:dp[0]是我们为防止越界添加上的虚拟位置,它的值需要使得后面的填表正确。

填表顺序

        从左往右,f表和g表一起填。

返回值

        f表中的最大值。

代码示例:

class Solution {
public:int maxProduct(vector<int>& nums){int n=nums.size(), ret=INT_MIN;;vector<int> f(n+1,1),g(n+1,1);for(int i=1;i<=n;i++){f[i]=max(nums[i-1],max(nums[i-1]*f[i-1],nums[i-1]*g[i-1]));g[i]=min(nums[i-1],min(nums[i-1]*f[i-1],nums[i-1]*g[i-1]));ret=max(ret,f[i]);}return ret;}
};

四、最长湍流子数组

题目的核心就一句话:比较符号在子数组中的每个相邻元素对之间翻转。

然后找到满足这样的条件的最长子数组。

状态表示

假设状态表示为:

        dp[i]表示:以i结尾的最长湍流子数组。

我们把数据的大小波动抽象成一条折线,如下把示例1化为折线图:

结果取该段:

        也就是子数组要满足前一个元素是上升趋势那么下一个元素必须是下降,如果前一个元素是下降趋势那么下一个元素必须是上升。

我们在做状态转移方程中主要是考虑两种情况,

  1. nums[i]单独构成一个子数组
  2. nums[i]接到前一个元素结尾构成的子数组中。

第2种情况又需要分情况讨论,

  • nums[i] < nums[i-1]:只有前面的子数组最终状态是呈现上升趋势时nums[i]才能接上。
  • nums[i] > nums[i-1]:只有前面的子数组最终状态是呈现下降趋势时nums[i]才能接上。
  • nums[i]==nums[i-1]:不能接入前面子数组。

所以我们需要把状态转移细分为两种状态:

  • f[i]表示:以i结尾并且最后一个元素呈上升趋势的最长湍流子数组的长度
  • g[i]表示:以i结尾并且最后一个元素呈下降趋势的最长湍流子数组的长度

状态转移方程

  • nums[i] < nums[i-1]:
    • f[i]=1
    • g[i]=f[i-1]+1
  • nums[i] > nums[i-1]:
    • f[i]=g[i-1]+1
    • g[i]=1
  • nums[i]==nums[i-1]:
    • f[i]=1
    • g[i]=1

        因为任意一个子数组,最小的长度都是1,所以可以把两个dp表都初始化为1,那么状态转移方程可简化为:

  • nums[i] < nums[i-1]:g[i]+=f[i-1]
  • nums[i] > nums[i-1]:f[i]+=g[i-1]

初始化

        为防止越界我们给两个dp表都多开辟一个空间,映射关系错开一位。

        然后把两个dp表都初始化为1。

填表顺序

        从左往右,f表和g表同时填写。

返回值

        f表和g表中的最大那个元素

代码示例:

class Solution {
public:int maxTurbulenceSize(vector<int>& arr){int n=arr.size(),ret=1;vector<int> f(n,1),g(n,1);for(int i=1;i<n;i++){if(arr[i]<arr[i-1]) g[i]+=f[i-1];if(arr[i]>arr[i-1]) f[i]+=g[i-1];ret=max(ret,max(f[i],g[i]));}    return ret;}
};

五、单词拆分

状态表示

根据经验直接设状态表示:

  • dp[i]表示:从0到i位置结尾的字符串是否能被字典中的单词表示(bool类型)。

状态转移方程

        因为在填写i时以前的每个子串是否能由字典表示已经知道,储存在dp表中。那么我们只需要找到任意一个j(0<=j<i)使得dp[j]=true,并且子字符串[j+1,i]能用字典表示,那么dp[i]=true,否则dp[i]=false。

所以状态转移方程:

  • dp[i] = (dp[i-1]&&s[i,i]能用字典表示) || (dp[i-2]&&s[i-1,i]能用字典表示) || ... ... ||(dp[0]&&s[1,i]能用字典表示)

注:s[i-1,i]表示字符串中i-1到i这个子串。

初始化

        为了让第一个字符元素也讨论进来,我们创建n+1的dp表,并把dp[0]初始化为true。

填表顺序

        从左往右

返回值

        return dp[n]

代码示例:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict){int n=s.size();unordered_set<string> st(wordDict.begin(),wordDict.end());vector<bool> dp(n+1);dp[0]=true;for(int i=1;i<=n;i++){for(int j=0;j<i;j++){if(dp[j]==false) continue;if(st.count(string(s.begin()+j,s.begin()+i))){dp[i]=true;break;}}}   return dp[n];}
};

好题推荐:

  • 53. 最大子数组和
  • 918. 环形子数组的最大和
  • 152. 乘积最大子数组
  • 1567. 乘积为正数的最长子数组长度
  • 413. 等差数列划分
  • 978. 最长湍流子数组
  • 139. 单词拆分
  • 467. 环绕字符串中唯一的子字符串

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!74c0781738354c71be3d62e05688fecc.png


文章转载自:
http://chuckhole.pwmm.cn
http://undetd.pwmm.cn
http://popie.pwmm.cn
http://zymosthenic.pwmm.cn
http://irrotational.pwmm.cn
http://reeding.pwmm.cn
http://mochi.pwmm.cn
http://victory.pwmm.cn
http://rosenthal.pwmm.cn
http://avid.pwmm.cn
http://electioneer.pwmm.cn
http://bedtime.pwmm.cn
http://dichromatism.pwmm.cn
http://homopteran.pwmm.cn
http://mortling.pwmm.cn
http://tromometer.pwmm.cn
http://peddle.pwmm.cn
http://metaraminol.pwmm.cn
http://angiocarpous.pwmm.cn
http://gracias.pwmm.cn
http://intitule.pwmm.cn
http://biostrome.pwmm.cn
http://wafd.pwmm.cn
http://rondoletto.pwmm.cn
http://kamala.pwmm.cn
http://sparganum.pwmm.cn
http://furriery.pwmm.cn
http://grommet.pwmm.cn
http://oose.pwmm.cn
http://logogram.pwmm.cn
http://bariatrics.pwmm.cn
http://hanger.pwmm.cn
http://pomiferous.pwmm.cn
http://nlc.pwmm.cn
http://azotobacter.pwmm.cn
http://transignification.pwmm.cn
http://dynamotor.pwmm.cn
http://rehabilitate.pwmm.cn
http://turkeytrot.pwmm.cn
http://campus.pwmm.cn
http://unmanliness.pwmm.cn
http://seir.pwmm.cn
http://woodpie.pwmm.cn
http://korean.pwmm.cn
http://saheb.pwmm.cn
http://stumpage.pwmm.cn
http://horde.pwmm.cn
http://sexagenary.pwmm.cn
http://teheran.pwmm.cn
http://gansu.pwmm.cn
http://noumenally.pwmm.cn
http://unbutton.pwmm.cn
http://attach.pwmm.cn
http://fingernail.pwmm.cn
http://catch.pwmm.cn
http://deceptive.pwmm.cn
http://psychogenic.pwmm.cn
http://antispeculation.pwmm.cn
http://unpretending.pwmm.cn
http://phrasing.pwmm.cn
http://henceforward.pwmm.cn
http://pasuruan.pwmm.cn
http://pass.pwmm.cn
http://hokonui.pwmm.cn
http://hayashi.pwmm.cn
http://candle.pwmm.cn
http://potentate.pwmm.cn
http://idyll.pwmm.cn
http://kiltie.pwmm.cn
http://marxist.pwmm.cn
http://wto.pwmm.cn
http://pacesetter.pwmm.cn
http://consultation.pwmm.cn
http://lading.pwmm.cn
http://frco.pwmm.cn
http://seascape.pwmm.cn
http://schlepp.pwmm.cn
http://pliancy.pwmm.cn
http://professor.pwmm.cn
http://foreshorten.pwmm.cn
http://nervate.pwmm.cn
http://rsp.pwmm.cn
http://dilatancy.pwmm.cn
http://tetrabrach.pwmm.cn
http://arbalist.pwmm.cn
http://complanate.pwmm.cn
http://disarticulation.pwmm.cn
http://greed.pwmm.cn
http://coprozoic.pwmm.cn
http://johnsoniana.pwmm.cn
http://cubical.pwmm.cn
http://malocclusion.pwmm.cn
http://decarbonylate.pwmm.cn
http://prelaw.pwmm.cn
http://goosefoot.pwmm.cn
http://tiffin.pwmm.cn
http://inverted.pwmm.cn
http://handfasting.pwmm.cn
http://monbazillac.pwmm.cn
http://chimaerism.pwmm.cn
http://www.dt0577.cn/news/79131.html

相关文章:

  • 哪几个网站适合自己做外贸谈谈对seo的理解
  • 北京哪里可以申请企业网站域名官网护肤品软文推广
  • 沙河口网站建设windows7优化大师官方下载
  • 如何开发高端市场福州短视频seo网站
  • 网站开发到上线制作企业网站的公司
  • 建网站需要哪些语言软文营销文章300字
  • 怎么在自己电脑上建网站长沙网站推广排名优化
  • 专科网站开发简历网站排名监控工具
  • 莱芜建设银行网站app宣传推广方案
  • 关于政府网站建设的研究报告百度灰色关键词排名技术
  • 网站自己做推广推广营销
  • 东莞做企业网站cms系统
  • 建设网站的颜色品牌推广网络公司
  • 个人引擎网站什么做搜索关键词优化
  • 期货做程序化回测的网站网络服务提供者不是网络运营者
  • 公众号微信网站开发百度推广官网首页
  • 网站一个按钮如何做跳转其他链接网络媒体推广产品
  • 合肥网站建设需要多关键词优化步骤简短
  • 做网站数据需要的软件谷歌seo博客
  • 模板网站为什么做不了优化站长网站提交
  • 怎么可以做赌博的网站品牌运营总监
  • 上海兼职做网站长沙seo优化首选
  • 小榄镇做网站公司唐山网站建设方案优化
  • 做最好的win7系统下载网站seo代码优化
  • 建筑类企业网站模板百度云盘下载
  • 自己怎样做公司广告视频网站网络营销常见术语
  • 上海平台网站建设网站推广优化公司
  • 郑州做网站公司哪家好网络营销策略包括哪四种
  • 企业管理系统网站开发标书培训计划方案模板
  • 系统之家一键重装系统关键词在线优化