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

东莞多语言网站建设美妆网站设计模板

东莞多语言网站建设,美妆网站设计模板,一般网站海报做一张多久,推动高质量发展心得体会三刷day48 198.打家劫舍1.确定dp数组#xff08;dp table#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 213.打家劫舍II情况一#xff1a;考虑不包含首尾元素情况二#xff1a;考虑包含首元素#xff0c;不包含尾元素情况三dp table以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 213.打家劫舍II情况一考虑不包含首尾元素情况二考虑包含首元素不包含尾元素情况三考虑包含尾元素不包含首元素 337.打家劫舍III1.确定递归函数的参数和返回值2.确定终止条件3.确定遍历顺序4.确定单层递归的逻辑5.举例推导dp数组 198.打家劫舍 题目链接 解题思路 当前状态和前面状态会有一种依赖关系那么这种依赖关系都是动规的递推公式。 动规五部曲分析如下 1.确定dp数组dp table以及下标的含义 dp[i]考虑下标i包括i以内的房屋最多可以偷窃的金额为dp[i]。 2.确定递推公式 决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间那么dp[i] dp[i - 2] nums[i] 即第i-1房一定是不考虑的找出下标i-2包括i-2以内的房屋最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。 如果不偷第i房间那么dp[i] dp[i - 1]即考 虑i-1房注意这里是考虑并不是一定要偷i-1房这是容易混淆的点 然后dp[i]取最大值即dp[i] max(dp[i - 2] nums[i], dp[i - 1]); 3.dp数组如何初始化 从递推公式dp[i] max(dp[i - 2] nums[i], dp[i - 1]);可以看出递推公式的基础就是dp[0] 和 dp[1] 从dp[i]的定义上来讲dp[0] 一定是 nums[0]dp[1]就是nums[0]和nums[1]的最大值即dp[1] max(nums[0], nums[1]); 代码如下 vectorint dp(nums.size()); dp[0] nums[0]; dp[1] max(nums[0], nums[1]);4.确定遍历顺序 dp[i] 是根据dp[i - 2] 和 dp[i - 1] 推导出来的那么一定是从前到后遍历 代码如下 for (int i 2; i nums.size(); i) {dp[i] max(dp[i - 2] nums[i], dp[i - 1]); }5.举例推导dp数组 以示例二输入[2,7,9,3,1]为例。 红框dp[nums.size() - 1]为结果。 以上分析完毕C代码如下 class Solution { public:int rob(vectorint nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];vectorint dp(nums.size());dp[0] nums[0];dp[1] max(nums[0], nums[1]);for (int i 2; i nums.size(); i) {dp[i] max(dp[i - 2] nums[i], dp[i - 1]);}return dp[nums.size() - 1];} }; 213.打家劫舍II 题目链接 解题思路 和198 打家劫舍1 相比唯一区别就是成环了。 对于一个数组成环的话主要有如下三种情况 情况一考虑不包含首尾元素 情况二考虑包含首元素不包含尾元素 情况三考虑包含尾元素不包含首元素 情况三中虽然是考虑包含尾元素但不一定要选尾部元素 对于情况三取nums[1] 和 nums[3]就是最大的。 而情况二 和 情况三 都包含了情况一了所以只考虑情况二和情况三就可以了。 代码如下 // 注意注释中的情况二情况三以及把198.打家劫舍的代码抽离出来了 class Solution { public:int rob(vectorint nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];int result1 robRange(nums, 0, nums.size() - 2); // 情况二int result2 robRange(nums, 1, nums.size() - 1); // 情况三return max(result1, result2);}// 198.打家劫舍的逻辑int robRange(vectorint nums, int start, int end) {if (end start) return nums[start];vectorint dp(nums.size());dp[start] nums[start];dp[start 1] max(nums[start], nums[start 1]);for (int i start 2; i end; i) {dp[i] max(dp[i - 2] nums[i], dp[i - 1]);}return dp[end];} };337.打家劫舍III 解题思路 这道题目算是树形dp的入门题目因为是在树上进行状态转移我们在讲解二叉树的时候说过递归三部曲那么下面我以递归三部曲为框架其中融合动规五部曲的内容来进行讲解。 1.确定递归函数的参数和返回值 这里我们要求一个节点 偷与不偷的两个状态所得到的金钱那么返回值就是一个长度为2的数组。 参数为当前节点代码如下 vectorint robTree(TreeNode* cur) {其实这里的返回数组就是dp数组。 所以dp数组dp table以及下标的含义下标为0记录不偷该节点所得到的的最大金钱下标为1记录偷该节点所得到的的最大金钱。 所以本题dp数组就是一个长度为2的数组 那么有同学可能疑惑长度为2的数组怎么标记树中每个节点的状态呢 别忘了在递归的过程中系统栈会保存每一层递归的参数。 如果还不理解的话就接着往下看看到代码就理解了哈。 2.确定终止条件 在遍历的过程中如果遇到空节点的话很明显无论偷还是不偷都是0所以就返回 if (cur NULL) return vectorint{0, 0};这也相当于dp数组的初始化 3.确定遍历顺序 首先明确的是使用后序遍历。 因为要通过递归函数的返回值来做下一步计算。 通过递归左节点得到左节点偷与不偷的金钱。 通过递归右节点得到右节点偷与不偷的金钱。 代码如下 // 下标0不偷下标1偷 vectorint left robTree(cur-left); // 左 vectorint right robTree(cur-right); // 右 // 中4.确定单层递归的逻辑 如果是偷当前节点那么左右孩子就不能偷val1 cur-val left[0] right[0]; 如果对下标含义不理解就再回顾一下dp数组的含义 如果不偷当前节点那么左右孩子就可以偷至于到底偷不偷一定是选一个最大的所以val2 max(left[0], left[1]) max(right[0], right[1]); 最后当前节点的状态就是{val2, val1}; 即{不偷当前节点得到的最大金钱偷当前节点得到的最大金钱} 代码如下 vectorint left robTree(cur-left); // 左 vectorint right robTree(cur-right); // 右// 偷cur int val1 cur-val left[0] right[0]; // 不偷cur int val2 max(left[0], left[1]) max(right[0], right[1]); return {val2, val1};5.举例推导dp数组 以示例1为例dp数组状态如下注意用后序遍历的方式推导 最后头结点就是 取下标0 和 下标1的最大值就是偷得的最大金钱。 递归三部曲与动规五部曲分析完毕C代码如下 class Solution { public:int rob(TreeNode* root) {vectorint result robTree(root);return max(result[0], result[1]);}// 长度为2的数组0不偷1偷vectorint robTree(TreeNode* cur) {if (cur NULL) return vectorint{0, 0};vectorint left robTree(cur-left);vectorint right robTree(cur-right);// 偷cur那么就不能偷左右节点。int val1 cur-val left[0] right[0];// 不偷cur那么可以偷也可以不偷左右节点则取较大的情况int val2 max(left[0], left[1]) max(right[0], right[1]);return {val2, val1};} };
http://www.zqtcl.cn/news/635663/

相关文章:

  • seo网站优化代码静态网站可以做哪些
  • 网页素材及网站架构制作个人单页网站模板
  • 微小店网站建设价格建设网站设备预算
  • 电子商城网站开发公司泰州网络营销
  • 网站建设公司利润分配一些常用的网站
  • 鄂尔多斯做网站的公司北京企业网站设计报价
  • 南宁关键词网站排名wordpress付免签插件
  • 龙岩网站定制电子政务与网站建设方面
  • 东莞网站制作十强英语培训机构网站建设策划书
  • 住房和城乡建设部网站加装电梯苏州外发加工网
  • 企业网站管理系统带授权广州seo报价
  • 建设门户网站的意义旅游电商网站建设方案模板
  • 网站做动态图片不显示某购物网站开发项目
  • 大淘客网站logo怎么做紫鸟超级浏览器手机版
  • 专做公司网站 大庆wordpress编辑器百度云
  • 企业手机网站模板下载网站建设实训 考核要求
  • 企业网站建设的ppt4414站长平台
  • 物流网站制作怎么做pc网站开发
  • 合肥做网站可以吗网站程序 seo
  • 网站备案 动态ip网站多域名
  • 网站加速免费电子商务网站建设的认识
  • 做职业资格考试的网站有哪些网页游戏排行榜2024前十名
  • 网站设计方案怎么写wordpress仿站软件
  • 汕头建站模板系统北京有哪些电商平台公司
  • 深圳网站建设zhaoseo小包工头接活的平台
  • 电商平面设计前景如何seo推广什么意思
  • 网站解析不了wordpress 密码失败
  • 临沂企业建站系统模板扮家家室内设计
  • 做简单网站用什么软件网站开发国外研究现状
  • 江苏seo推广网站建设湖南软件定制开发