网站设计任务怎么自己制作二维码内容
news/
2025/9/23 12:19:04/
文章来源:
网站设计任务,怎么自己制作二维码内容,个人资料展示网站,flash型网站打家劫舍2 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址#xff1a;点这里 2. 讲解算法原理 首先#xff0c;给定一个非负整数数组 nums#xff0c;其中 nums[i] 表示第 i 家的财物价值。 定义两个辅助数组 f 和 g#xff0c;长度都为 n#xff08;n 是… 打家劫舍2 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址点这里 2. 讲解算法原理 首先给定一个非负整数数组 nums其中 nums[i] 表示第 i 家的财物价值。 定义两个辅助数组 f 和 g长度都为 nn 是数组 nums 的长度。 数组 f 表示在偷盗范围为 [left, right] 内且必须偷最后一家的情况下能够获取的最大财物价值。数组 g 表示在偷盗范围为 [left, right] 内且不偷最后一家的情况下能够获取的最大财物价值。 定义函数 rob_s参数为 left、right 和 nums表示在偷盗范围为 [left, right] 内计算可以获取的最大财物价值。
初始化数组 f 和 g 的第一个元素 f[left] nums[left]表示在偷盗范围 [left, right] 内偷盗第一家最大财物价值为第一家的价值。g[left] 0表示在偷盗范围 [left, right] 内不偷盗第一家最大财物价值为0。 从 left1 开始从左到右遍历数组 nums计算在偷盗范围 [left, right] 内的最大财物价值 对于第 i 家如果选择偷盗则最大财物价值为前一家不偷盗的最大财物价值 g[i-1] 加上第 i 家的财物价值 nums[i]即 f[i] g[i-1] nums[i]。对于第 i 家如果选择不偷盗则最大财物价值为前一家偷盗和不偷盗的最大财物价值中的较大值即 g[i] max(g[i-1], f[i-1])。 返回在偷盗范围 [left, right] 内的最大财物价值即 max(f[right], g[right])。
在 rob 函数中首先判断特殊情况
如果数组 nums 的长度为1则直接返回第一家的财物价值。如果数组 nums 的长度为2则返回两家财物价值中的较大值。
对于一般情况分两种情况计算最大财物价值
情况一偷盗第一家但不能偷盗最后一家。对范围 [2, n-2] 进行一次打家劫舍使用函数 rob_s再加上第一家的财物价值 nums[0]即 ret1 rob_s(2, n-2, nums) nums[0]。情况二不偷盗第一家对范围 [1, n-1] 进行一次打家劫舍使用函数 rob_s即 ret2 rob_s(1, n-1, nums)。
返回两种情况下的最大财物价值即 max(ret1, ret2)。 3. 编写代码
class Solution {
public:int rob_s(int left,int right,vectorint nums){int nnums.size();vectorint f(n);vectorint g(n);f[left]nums[left],g[left]0;for(int ileft1;iright;i){f[i]g[i-1]nums[i];g[i]max(g[i-1],f[i-1]);}return max(f[right],g[right]);}int rob(vectorint nums) {int nnums.size();//处理特殊情况if(n1) return nums[0];else if(n2) return max(nums[0],nums[1]);vectorint f(n);vectorint g(n);//情况一偷第一家就不能偷最后一家-对[2,n-2]进行一次打家劫舍1再nums[0]就行int ret1rob_s(2,n-2,nums)nums[0];//情况二不偷第一家对[1,n-1]进行一次打家劫舍1就行int ret2rob_s(1,n-1,nums);return max(ret1,ret2);}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912516.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!