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

网站建设的目的意义南昌网站小程序开发

网站建设的目的意义,南昌网站小程序开发,上海网站设计建设,网站的内链建设day47198.打家劫舍1.确定dp数组#xff08;dp table#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组213.打家劫舍II情况一#xff1a;考虑不包含首尾元素情况二#xff1a;考虑包含首元素#xff0c;不包含尾元素情况三#x… day47198.打家劫舍1.确定dp数组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.hkea.cn/news/14283316/

相关文章:

  • 个人网站 可以做淘宝客吗低代码开发技术
  • 建立网站原则标志logo设计图片
  • 沙田镇仿做网站企业网页设计报价
  • 小程序制作模板网站广告联盟哪个比较好
  • 莒县做网站的公司客户管理软件哪家好
  • 怎么破解网站后台密码wordpress流主题
  • 内蒙古呼和浩特特产百度seo营销推广
  • 济南市城市建设集团网站静态网站做一单多少钱
  • 工业设计在线网站做优惠券的网站搭建
  • 做网站的费用如何入账2017网站备案
  • 广州市门户网站建设怎样做营销型网站推广
  • ppt模板下载素材网站学校门户网站建设必要性
  • 阿里云服务器可以访问国外网站吗wordpress免费教育机构主题
  • 矿山建设工程公司网站wordpress能采集
  • 做电脑游戏破解的网站网站重构
  • 宁波seo排名公司seo外包公司多少钱
  • 四川微信网站建设推广成都手机网站建设报价
  • 威海网站建设兼职wordpress 中国企业
  • 适合seo的建站系统搜索排名提升
  • 物流公司网站建设有什么要点wordpress网站菜单固定
  • 昌吉建设网站南京网站定制开发公司
  • 郑州视频网站建设大概多少钱商丘家具网站建设
  • 企业网站托管平台有哪些山东公司网站建设
  • 公司网站建设外包流程图阿里云主机如何搭建wordpress
  • 青岛网站推广公司地产渠道12种拓客方式
  • 深圳做三网合一网站大连头条热点新闻
  • 沃尔玛公司网站建设案例分析推广软文
  • 机场网站建设宁波网站建设相信荣胜网络
  • 网站域名不备案吗wordpress免费商业主题
  • 电商平台官方网站最美情侣视频免费观看完整版高清