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

做仿牌网站空间抖音推广网站

做仿牌网站空间,抖音推广网站,淘宝联盟网站建设不完整,试述网站建设的步骤198. 打家劫舍 思路: 动规五部曲: 1.dp数组及其下标的意义:dp数组表示当前房屋下偷与不偷的最大盗取金额 2.确定递推公式:因为盗取房屋只能间隔盗取,并且还要取最大值。所以每个房屋都有盗取和不盗取两个选择&…

198. 打家劫舍

思路:

动规五部曲:

1.dp数组及其下标的意义:dp数组表示当前房屋下偷与不偷的最大盗取金额

2.确定递推公式:因为盗取房屋只能间隔盗取,并且还要取最大值。所以每个房屋都有盗取和不盗取两个选择,盗不盗取取决于金额,所以递推公式为dp[ i ] = max(dp[ i-1] (不盗取),dp[i-2 ]+nums[ i ](盗取))

3.dp数组的初始化:因为递推公式要取最大盗取金额,同时金额都为非负数,所以初始化为最小值0

4.遍历顺序:从前往后

代码:

class Solution {
public:int rob(vector<int>& nums) {vector<int> dp(nums.size(),0);if(nums.size() == 0)return 0;if(nums.size()==1)return nums[0];//一定不要忘了无法用递推公式的情况//dp数组的初始化dp[0] = nums[0];dp[1] = max(nums[0],nums[1]);for(int i =2;i <nums.size();i++){dp[i] = max(dp[i-1],dp[i-2]+nums[i]);}return dp[nums.size()-1];}
};

遇到的问题:

对于一开始如果nums的个数小于三,那么就无法应用递推公式,需要手动判断

213. 打家劫舍 II

思路:

此题与上一题不同的是,这次的家是环形的,而非线性。因为相邻就不偷,所以第一个和最后一个只有一个可以偷,所以分两种情况

1.dp数组及其下标的意义:

dp数组表示当前序号房屋下偷与不偷的最大盗取金额

2.确定递推公式:

dp[ i ] = max(dp[ i-1] (不盗取),dp[i-2 ]+nums[ i ](盗取))

3.dp数组的初始化:因为递推公式要取最大盗取金额,同时金额都为非负数,所以初始化为最小值0

4.遍历顺序:从前往后

代码:

class Solution {
public:int rob(vector<int>& nums) {if(nums.size() == 0)return 0;if(nums.size()==1)return nums[0];int result1 = caozuo(nums,1,nums.size()-1);int result2 = caozuo(nums,0,nums.size()-2);return max(result1,result2);}int caozuo(vector<int>& nums ,int start,int end){if(start == end)return nums[start];vector<int> dp(nums.size(),0);//此处相当于复制了一个dp数组,因为start和end是原来的dp数组截取的下标,所以长度不能动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-1],dp[i-2]+nums[i]);}return dp[end];//此处因为最后的值为end}
};

遇到的问题:

对于在分情况讨论只有头房子和尾房子时,处理dp数组的方式与不分情况是一样的

337. 打家劫舍 III

思路:

1.dp数组的意义:dp数组下标为0记录不偷该节点所得到的的最大金钱,下标为1记录偷该节点所得到的的最大金钱。

2.中止条件:cur ==NULL遇到叶子节点

3.遍历顺序:因为是二叉树,所以遍历顺序从前中后遍历中选择,选择后序遍历,因为当前节点偷不偷取决于子节点

代码:

class Solution{
public:int rob(TreeNode* root) {//dp数组采用一个动态数组,内部只有两个元素,0和1,vector<int> result = caozuo(root);return max(result[0],result[1]);}vector<int> caozuo(TreeNode* cur){if(cur == NULL)return {0,0};//后序遍历//左vector<int>left = caozuo(cur->left);//右vector<int>right = caozuo(cur->right);//中//偷父节点int val1 = cur->val + left[0]+right[0];//不偷父节点int val2 = max(left[0],left[1]) + max(right[0] ,right[1]);return {val2,val1};//{ }是列表的初始化来赋值数组}
};

遇到的问题:

1. return {val2,val1};//{ }是列表的初始化来赋值数组

2.为什么选择从下往上偷,第一可以使用递归函数的返回值,第二符合动态规划的思路(重叠子问题,最优子结构)

http://www.dtcms.com/wzjs/202266.html

相关文章:

  • 网站技术策划自助建站平台
  • 泉州有专门帮做网站的吗东莞百度快速排名
  • 推荐一些做电子的网站永久免费域名注册
  • 个人网站做团购google浏览器官网
  • 参考网是正规网站吗武汉百度推广开户
  • 南昌网站建设公司效果营销型网站建设费用
  • 网站创意文案怎么做外链怎么做
  • 有哪些好用的网站免费二级域名生成网站
  • 建设银行官网首页网站南山片区nba排名最新
  • 官方网站welcome怎么注册软文写作网站
  • 上门做网站公司百度如何购买关键词
  • 有关建设网站的论文免费做网站怎么做网站
  • 西城网站建设公司做免费推广的平台
  • 花都建设网站百度推广有哪些形式
  • 金山网站建设交易链接
  • 做白酒网站软文营销的定义
  • 织梦网站登录seo论坛站长交流
  • 福州专业网站搭建排名广告搜索引擎
  • 政府网站建设的不足自制网页
  • 拼多多网店能挣钱吗杭州seo搜索引擎优化
  • bdcms 网站手机如何制作一个网页链接
  • 昆明做网站的今天国内新闻10条
  • 代写网站最近一周新闻热点大事件
  • dw做动态网站站点怎么北京网站制作400办理多少钱
  • 数据做图网站有哪些数字营销
  • 做网站不好做百度关键词搜索量统计
  • 深圳餐饮公司网站制作邀请注册推广赚钱
  • 怎么做网站后台深圳网络推广公司
  • php网站视频代码谷歌推广app
  • 安全网站建设成都网站seo外包