代码随想录训练营Day34:背包问题解决打家劫舍

1.198打家劫舍

1.dp数组的含义:dp[i]表示从第零个偷到第i个能够偷到的最大价值。

2.递推公式:分成两种情况:

  1. 偷第i个的情况下的最大值,注意此时第i-1个肯定是不偷的,所以此时dp[i] = dp[i-2]+nums[i];=>dp[j] = dp[j-weight[i]]+value[i];
  2. 不偷第i个的情况下的最大值,需要注意的是此时第i-1个不一定偷,只是考虑第i-1个房间。所以此时为dp[i] = dp[i-1]

      最后取两者的最大值。

class Solution {
public:int rob(vector<int>& nums) {int n = nums.size();if(n == 0)return 0;if(n == 1) return nums[0];//边界条件vector<int> dp(n);//偷到i房间的最大的价值dp[0] = nums[0];dp[1] = max(nums[0],nums[1]);for(int i = 2;i<n;i++){//偷第i个房间:第i-2最大值的最大值加上当前的值,不偷第i个房间:第i-1的最大值dp[i] = max(dp[i-2]+nums[i],dp[i-1]);}return dp[n-1];}
};

2.213打家劫舍二

本题相比于前面多了一个首尾相连的情况,为了解决这个问题,我们可以将其分成两个部分(第一个是不含最后一个,第二个是不含第一个),每个部分都按按照前面打家劫舍的方式来求解,求解出两种情况下打家劫舍的最大值之后,然后计算出最大值即可。

class Solution {
public:int rob(vector<int>& nums) {//分成两次,一次是含首不含尾,一次是含尾不含首,两次求出来的最大值再最后求一个最大值即为最终结果int n = nums.size();if(n==1) return nums[0];if(n==2) return max(nums[0],nums[1]);//vector<int> dp1(n-1);int dp10 =nums[0],dp11=max(nums[0],nums[1]),result1=dp11;int dp20 =nums[1],dp21=max(nums[1],nums[2]),result2=dp21;for(int i = 2;i<n-1;i++){result1 = max(dp10+nums[i],dp11);dp10 = dp11;dp11 = result1;result2 = max(dp20+nums[i+1],dp21);dp20 = dp21;dp21 = result2;}return max(result1,result2);/*dp1[0]=nums[0];cout<<dp1[0];dp1[1]=max(nums[0],nums[1]);for(int i = 2;i<n-1;i++){dp1[i]=max(dp1[i-2]+nums[i],dp1[i-1]);}vector<int> dp2(n-1);dp2[0]=nums[1];dp2[1]=max(nums[1],nums[2]);for(int i = 2;i<n-1;i++){dp2[i]=max(dp2[i-2]+nums[i+1],dp2[i-1]);}return max(dp1[n-2],dp2[n-2]);*/}
};

3.337打家劫舍三

思路:首先我们可以看出这是一个树形结构,对于这种树形结构要求出最大值,我们就需要先确定遍历顺序,先确定左右两个孩子是否偷,再确定父节点是否偷从而实现一个相对来说的最大值,所以遍历方式选择的是深度遍历。第二个需要确定的就是返回值:由于偷和不偷分为两种情况,所以返回值应该是一个数组,分别存放偷还是不偷的结果。第三个确定的是循环终止条件:当其孩子节点为空的时候,偷不偷都是0,此时返回return {0,0};第四个需要确定的是循环内的处理情况:分别是该节点偷的时候的最大值和该节点不偷的时候的最大值,将其作为返回数组返回。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public://[不偷,偷]这样的返回结果vector<int> TreerobMax(TreeNode* cur){if(cur == nullptr){return {0,0};}vector<int> left = TreerobMax(cur->left);vector<int> right = TreerobMax(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};}int rob(TreeNode* root) {vector<int> result = TreerobMax(root);return max(result[0],result[1]);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity数据持久化2——XML

简介&#xff1a; 基础知识 XML文件格式 XML基本语法 XML属性 练习&#xff1a; C#读取存储XML XML文件存放位置 读取XML文件 练习&#xff1a; 存储修改XML文件 练习&#xff1a; 总结 实践小项目 必备知识点 必备知识点——C#中XML序列化 必备知识点——C#中XML反序列化 必备…

java 线程执行原理,java线程在jvm中执行流程

java 线程执行原理&#xff0c;java线程在jvm中执行流程 从jvm视角看java线程执行过程 ##首先thread.c注册jni函数 JNIEXPORT void JNICALL Java_java_lang_Thread_registerNatives(JNIEnv *env, jclass cls) {(*env)->RegisterNatives(env, cls, methods, ARRAY_LENGTH(…

第八课,分支语句嵌套、随机数函数、初识while循环

一&#xff0c;分支结构的嵌套语法 在 Python 中&#xff0c;分支结构可以嵌套&#xff0c;这意味着你可以在一个条件语句中包含另一个条件语句。嵌套的分支结构可以让你更灵活地控制程序的逻辑流程。 怎么理解呢&#xff1f;打个比方&#xff1a;放学后&#xff0c;请三年级…

【MySQL精通之路】MySQL8.0新增功能-原子DDL语句支持

太长不看系列&#xff1a; 本文一句话总结&#xff0c;MySQL8.0支持多条DDL语句执行时的原子性了&#xff08;仅限Innodb&#xff09; 本文属于下面这篇博客的子博客&#xff1a; 【MySQL精通之路】MySQL8.0官方文档-新增功能 1.意义描述 MySQL 8.0支持原子数据定义语言&…

知乎广告推广开户最低需要多少钱?

精准高效的广告推广&#xff0c;是企业成功的关键&#xff0c;知乎作为知识分享与交流的高端平台&#xff0c;汇聚了大量高质量用户群体&#xff0c;无疑是品牌传播与产品推广的黄金之地。云衔科技作为您数字营销旅程中的得力伙伴&#xff0c;正以专业的知乎广告开户及代运营服…

快速搭建本地全文搜索

MeiliSearch 说起全文检索&#xff0c;在项目开发中&#xff0c;用的最多的就是 ElaticSearch 了&#xff0c;ElaticSearch 是基于 Apache Lucene 开发的全文检索服务&#xff0c;是一个端到端的解决方案&#xff0c;因此&#xff0c;部署和维护都非常复杂。今天介绍的这个全文…

AI配音可以商用吗?

随着人工智能技术的迅猛发展&#xff0c;AI配音技术在近几年的进步尤为显著。从最初的机械合成音到如今的智能语音合成&#xff0c;AI配音已经在广告、教育、媒体等领域中崭露头角&#xff0c;展现出其无限的潜力和广阔的应用空间。 AI配音技术的发展历程 AI配音技术起源于语…

如何在go项目中实现发送邮箱验证码、邮箱+验证码登录

前期准备 GoLand &#xff1a;2024.1.1 下载官网&#xff1a;https://www.jetbrains.com/zh-cn/go/download/other.html Postman&#xff1a; 下载官网&#xff1a;https://www.postman.com/downloads/ 效果图(使用Postman) Google&#xff1a; QQ&#xff1a; And …

【星海随笔】微信小程序(二)

WXML 模板语法 - 数据绑定 在data中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {// 字符串类型的数据info: init data,// 数据类型的数据msgList: [{msg: hello},{msg: world}]} })Mustache 语法的格式 把 …

jQuery值操作例子 (代码)

直接上代码 <!DOCTYPE html> <html><head></head><body><div id"x1">例子</div><script src"js/jquery-3.7.1.min.js"></script><script>console.log($("#x1").text()) // 在浏览…

创建vue工程、Vue项目的目录结构、Vue项目-启动、API风格

环境准备 介绍&#xff1a;create-vue是Vue官方提供的最新的脚手架工具&#xff0c;用于快速生成一个工程化的Vue项目create-vue提供如下功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包依赖环境&#xff1a;NodeJS 安装NodeJS 一、 创建vue工程 npm 类…

自定义横向思维导图,横向组织架构图,横向树图。可以自定义节点颜色,样式,还可以导出为图片

最近公司设计要求根据目录结构&#xff0c;横向展示。所以做了一个横向的思维导图&#xff0c;横向的树结构&#xff0c;横向的组织架构图&#xff0c;可以自定义节点颜色&#xff0c;样式&#xff0c;还可以导出为图片 话不多说&#xff0c;直接上图片&#xff0c;这个就是一…

使用redis优化纯真IP库访问

每次请求都需要加载10m的纯真IP qqwry.dat 文件&#xff0c;自己测试不会发现问题&#xff0c;但如果访问量上去了&#xff0c;会影响每次请求的相应效率&#xff0c;并且会消耗一定的io读写&#xff0c;故打算优化 优化方案 每个IP区间之间不存在交集&#xff0c;每个查找只要…

【已验证】debian12 更换国内源

1. 编辑 /etc/apt/sources.list 文件 sudo nano /etc/apt/sources.list2. 清空 sources.list 文件里的内容&#xff0c;讲下面内容拷贝到 sources.list deb http://mirrors.163.com/debian/ bookworm main contrib non-free non-free-firmware deb http://mirrors.163.com/de…

Nginx 代理与 Proxy 插件整合的最佳实践

推荐一个AI网站&#xff0c;免费使用豆包AI模型&#xff0c;快去白嫖&#x1f449;海鲸AI 写在前面 本文将介绍 Nginx 的正向代理配置以及如何与 Proxy 插件进行整合。正向代理是一种代理服务器&#xff0c;它代表客户端向目标服务器发送请求&#xff0c;并将响应返回给客户端…

【Linux】- HBase集群部署 [19]

简介 apache HBase是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。 和Redis一样&#xff0c;HBase是一款KeyValue型存储的数据库。 不过和Redis涉及方向不同 Redis设计为少量数据&#xff0c;超快检索HBase设计为海量数据&#xff0c;快速检索 HBase在大数据邻域…

【python】python省市水资源数据分析可视化(源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

2024年失业率狂飙18.1%,史上最难就业季即将来临,该如何逆袭?_2024年失业潮

【2024年被称为最难就业年&#xff0c;1158万大学生面临难题】 距离2024年毕业季还剩不到4个月&#xff0c;毕业学员将面临空前严峻的就业压力&#xff01;具国家统 计局的数据显示&#xff0c;1-2月份&#xff0c;16至24岁年轻人的失业率飙到18.1%&#xff0c;也就是说&…

JS之Reduce

reduce 是 JavaScript 中 Array 对象的一个方法&#xff0c;用于对数组中的每个元素执行一个提供的函数&#xff08;称为 reducer 函数&#xff09;&#xff0c;并将其结果汇总为单个返回值。它是一种高阶函数&#xff0c;可以用于数组的累积操作&#xff0c;例如求和、计算乘积…

微服务:利用RestTemplate实现远程调用

打算系统学习一下微服务知识&#xff0c;从今天开始记录。 远程调用 调用order接口&#xff0c;查询。 由于实现还未封装用户信息&#xff0c;所以为null。 下面我们来使用远程调用用户服务的接口&#xff0c;然后封装一下用户信息返回即可。 流程图 配置类中注入RestTe…