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

篮球网站设计汕头公众号开发公司

篮球网站设计,汕头公众号开发公司,网站关键词优化的方法,黄页网站建设黄页网站建设目录 LeetCode:198.打家劫舍 基本思路 C代码 LeetCode:213.打家劫舍II 基本思路 C代码 LeetCode:337.打家劫舍III 基本思路 C代码 LeetCode:198.打家劫舍 力扣题目链接 文字讲解#xff1a;LeetCode:198.打家劫舍 视频讲解#xff1a;动态规划#xff0c;偷不偷这个…目录 LeetCode:198.打家劫舍 基本思路 C代码 LeetCode:213.打家劫舍II 基本思路 C代码 LeetCode:337.打家劫舍III 基本思路 C代码 LeetCode:198.打家劫舍 力扣题目链接 文字讲解LeetCode:198.打家劫舍 视频讲解动态规划偷不偷这个房间呢 基本思路 看到这个问题很容易想到需要对当前房屋偷与不偷两种状态进行判断而这个状态和前一个房间和前两个房间是否被偷有很大的关系。 通过动规五部曲进行分析 确定dp数组dp table以及下标的含义 dp[i]考虑下标i包括i以内的房屋最多可以偷窃的金额为dp[i]。 确定递推公式 首先决定dp[i]的因素就是第i房间偷还是不偷。而如果偷了第i个房间那么其偷盗金额就和前两个房间有关如果不偷第i个房间显然dp[i]和前一个房间的金额相同。 因此容易推出递推公式为dp[i] max(dp[i-1],dp[i-2]nums[i]); dp数组如何初始化 因为题目明确说明街道上存在一个以上的房屋当街道上只有一个房屋时我们直接返回nums[0]如果大于等于两个房屋时我们令dp[0]为nums[0],令dp[1] max(nums[0],nums[1]); 确定遍历顺序 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]); } 举例推导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];} }; LeetCode:213.打家劫舍II 力扣题目链接 文字讲解LeetCode:213.打家劫舍II 视频讲解动态规划房间连成环了那还偷不偷呢 基本思路 这个题目相对于上一个题目不同点在于街道上的房子练成了一个圈那么我们到底应不应该选择第一个房屋和最后一个房屋呢 很容易想到可以分成三种情况 情况一考虑不包含首尾元素 情况二考虑包含首元素不包含尾元素 情况三考虑包含尾元素不包含首元素 而在情况二和情况三种我们提到可以考虑包含首尾元素而不是一定包含因此情况一的情形实际上是包含在情况二和情况三中的。 这个样子我们和容易和上个题目中的动规五部曲进行相同的分析了。无非就是进行判断的区间有所不同。 C代码 // 注意注释中的情况二情况三以及把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];} }; LeetCode:337.打家劫舍III 力扣题目链接 文字讲解LeetCode:337.打家劫舍III 视频讲解动态规划房间连成树了偷不偷呢 基本思路 这个题目结合了二叉树的相关知识如果忘记了的同学可以重新回顾一下二叉树相关的知识和题目。这个题目当然也可以使用二叉树递归的方法进行求解但是我们知道二叉树的时间复杂度远大于动态规划的时间复杂度这就很容易导致出现超时的情况。 这道题目算是树形dp的入门题目因为是在树上进行状态转移我们在讲解二叉树的时候说过递归三部曲那么下面我以递归三部曲为框架其中融合动规五部曲的内容来进行讲解。 确定递归函数的参数和返回值 我们需要传入的是根节点而返回的是所能偷到的最大金额因此返回值是int类型。对于每个二叉树节点我们需要求出对于当前节点偷与不偷两个状态。我们还需要设置一个函数用来记录每个节点偷与不偷状态下所能获得的最大金额。传入的为当前节点的指针返回为一个数组。 int rob(TreeNode* root) vectorint robTree(TreeNode* cur) 确定终止条件 对二叉树的所有节点进行遍历当节点为空节点时表示无论是否偷空节点偷到的金额都为零此时返回{0,0}。 if (cur NULL) return vectorint{0, 0}; 确定遍历顺序 因为是否偷当前节点需要根据是否偷左右孩子获得的最大金额决定。因此需要先遍历左右孩子在遍历中间节点即遍历方式采用后序遍历。 确定单层递归的逻辑 遍历当前节点时如果偷当前节点那么就不能偷左右孩子即取left[0]和right[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}; 举例推导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/14513113/

相关文章:

  • 萝岗网站建设优化国产服务器厂商排名
  • 深圳网站设计公司哪个中山网站建设文化机构
  • 网站建立后被别人点击要付钱吗莆田山亭乡建设局网站
  • synology建设网站wordpress设置多域名多站点
  • 开发网站的好处做网站最专业的公司有哪些
  • 外贸网站建设公司报价主机屋网站
  • 贵阳网站建设技术支持火山软件开发平台教程
  • 外贸网站 语言百度投放广告流程
  • 搜狐做app的网站网站收录查询情况
  • 手机网站分享js代码在住房和城乡建设部网站查询
  • 佛山微网站开发哪家好最好的免费cms系统
  • 滕州网站建网站的建设需要多少
  • 大连做网站公司WordPress 嵌入flash
  • 如何建立一个免费网站代理注册公司赚钱吗
  • 个人网站可以备案吗wordpress预约订单插件
  • 网站建设要不要工商注册西安公司电话
  • 一流的镇江网站优化wordpress调整logo大小
  • 广东官网网站建设公司西宁市城乡规划建设局网站
  • 网站正在维护中 模板网站后期增加产品
  • 保健品网站dede模板网络建设和网站建设
  • 作品展示html5网站模板jsp企业网站
  • 手机网站 免费个人网站备案需要什么资料
  • 中国网站为什么做的那么丑网站编辑兼职
  • 基于wordpress学校网站企业软件开发公司
  • codeorg免费编程网站有没有像一起做网店做男装的网站
  • 注册新公司网上核名网站优秀网站网址
  • app定制网站建设应有尽有沈阳酒店团购网站制作
  • 从事网站开发网站浏览历史能恢复吗怎么设置
  • 具有营销型网站的公司网迎客 网站建设
  • 如何做淘客网站个人网站seo入门