【代码随想录】Day 48 动态规划9 (打家劫舍Ⅰ Ⅱ Ⅲ)

news2024/11/16 13:45:06

打家劫舍

https://leetcode.cn/problems/house-robber/
在这里插入图片描述
注意要是i-1没偷,那么dp[i] = dp[i-2] + nums[i],而不是dp[i-1]:

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 0) return 0;
        if (nums.size() == 1) return nums[0];
        vector<int> 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.back();
    }
};

打家劫舍Ⅱ

https://leetcode.cn/problems/house-robber-ii/
在这里插入图片描述
环形问题展开为线形,分析几种情况:

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 0) return 0;
        if (nums.size() == 1) return nums[0];
        vector<int> dp(nums.size());
        vector<int> dp1(nums.size());
        vector<int> dp2(nums.size());
        //情况1 线性数组
        // dp[0] = 0;
        // dp[1] = nums[1];
        // for (int i = 2; i < nums.size()-1; i++) {
        //     dp[i] = max(dp[i-2] + nums[i], dp[i-1]);
        // }

        //情况2 不偷尾
        dp1[0] = nums[0];
        dp1[1] = max(nums[0], nums[1]);
        for (int i = 2; i < nums.size()-1; i++) {
            dp1[i] = max(dp1[i-2] + nums[i], dp1[i-1]);
        }
        //情况3 不偷头
        dp2[0] = 0;
        dp2[1] = nums[1];
        for (int i = 2; i < nums.size(); i++) {
            dp2[i] = max(dp2[i-2] + nums[i], dp2[i-1]);
        }
        return max(dp1[nums.size()-2], dp2.back());
    }
};

打家劫舍Ⅲ

https://leetcode.cn/problems/house-robber-iii/
在这里插入图片描述
大名鼎鼎的树形dp入门题,确实没做过的话完全想不到。。。
遍历树的节点的时候有两种情况,不偷自己和偷自己:robSelf[0]和robSelf[1],分别记录两种情况得到的最大金额。
注意偷自己的时候,两个孩子都属于不能偷的状态,所以robSelf[1] = self->val + left[0] + right[0];不偷自己的时候,两个孩子都能偷,所以可以偷他们俩最大值的和:robSelf[0] = max(left[0],left[1]) + max(right[0], right[1]);

class Solution {
public:
    vector<int> robTree(TreeNode* root) {
        vector<int> robSelf(2);        
        if (root == nullptr) return robSelf;
        
        //后序遍历 左右中
        vector<int> left = robTree(root->left);
        vector<int> right = robTree(root->right);

        //0不偷自己,偷俩孩子的和, 1偷自己,孩子都不能偷
        robSelf[0] = max(left[0], left[1]) + max(right[0], right[1]);
        robSelf[1] = root->val + left[0] + right[0];

        return robSelf;   
    }

    int rob(TreeNode* root) {
        vector<int> robSelf = robTree(root);
        return max(robSelf[0], robSelf[1]);
    }
};

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

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

相关文章

【图文并茂】C++介绍之串

1.1串 引子—— ​ 字符串简称为串&#xff0c;串是由字符元素构成的&#xff0c;其中元素的逻辑关系也是一种线性关系。串的处理在计算机非数值处理中占用重要的地位&#xff0c;如信息检索系统&#xff0c;文字编辑等都是以串数据作为处理对象 串是由零个或多个字符组成的…

OSCP系列靶场-Esay-Sumo

OSCP系列靶场-Esay-Sumo 总结 getwebshell : nikto扫描 → 发现shellshock漏洞 → 漏洞利用 → getwebshell 提 权 思 路 : 内网信息收集 → 内核版本较老 →脏牛提权 准备工作 启动VPN 获取攻击机IP → 192.168.45.194 启动靶机 获取目标机器IP → 192.168.190.87 信息收…

【LeetCode75】第四十九题 数组中的第K个最大元素

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目很简单&#xff0c;就是给我们一个数组&#xff0c;让我们返回第K大的元素。 那么很直观的一个做法就是我们直接对数组进行降序排序…

【恒生电子内推码】

Hello&#xff0c;我是恒生电子股份有限公司的校园大使&#xff0c;不想简历投递后“泡池子”&#xff0c;登录链接&#xff1a;campus.hundsun.com/campus/jobs&#xff0c;填写我的推荐码&#xff1a;EZVJR0&#xff0c;投递&#xff0c;简历第一时间送到HR面前&#xff0c;快…

STM32-DMA

1 DMA简介 DMA&#xff08;Direct Memory Access&#xff09;,中文名为直接内存访问&#xff0c;它是一些计算机总线架构提供的功能&#xff0c;能使数据从附加设备&#xff08;如磁盘驱动器&#xff09;直接发送到计算机主板的内存上。对应嵌入式处理器来说&#xff0c;DMA可…

【2023年数学建模国赛】赛题发布

2023数学建模国赛赛题已经发布啦&#xff0c;距离赛题发布已经过去三个小时了&#xff0c;大家是否已经确定题目呢&#xff1f;学姐后续会持续更新赛题思路与代码~

TINA如何导入spice模型

本文介绍如何使用TINA仿真运算放大器电路。TINA是TI公司自己的spice仿真软件&#xff0c;各个大厂为了更好的让客户使用自己的器件&#xff0c;都纷纷推出自己的仿真软件&#xff0c;ADI也有类似的软件&#xff0c;有机会我们介绍&#xff0c;这期我们主要简单介绍下如何使用TI…

Jmeter系列-Jmeter面板介绍和常用配置(2)

Jmeter面板介绍 常用菜单栏 分布式运行相关的 选项&#xff0c;可以打开日志&#xff0c;修改语言、函数助手对话框&#xff0c;还有管理插件 常用的图标 从左到右依次 新建测试计划选择测试计划模板创建一个新的测试计划打开jmeter脚本保存jmeter脚本剪切复制粘贴展开目录…

大数据课程K18——Spark的ALS算法与显式矩阵分解

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的ALS算法与显式矩阵分解; ⚪ 掌握Spark的ALS算法原理; 一、ALS算法与显式矩阵分解 1. 概述 我们在实现推荐系统时,当要处理的那些数据是由用户所提供的自身的偏好数据,这些…

Apache nginx解析漏洞复现

文章目录 空字节漏洞安装环境漏洞复现 背锅解析漏洞安装环境漏洞复现 空字节漏洞 安装环境 将nginx解压后放到c盘根目录下&#xff1a; 运行startup.bat启动环境&#xff1a; 在HTML文件夹下有它的主页文件&#xff1a; 漏洞复现 nginx在遇到后缀名有php的文件时&#xff0c;…

微信小程序组件的创建与引用

组件的创建 <view><swiper class"myswiper" interval"{{interval}}" circular autoplay"{{autoplay}}" indicator-dots"{{indicatorDots}}"><swiper-item><image mode"widthFix" src"/image/l…

【JAVA】面向对象的编程语言(继承篇)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言继承类的继承方式继承的各种类型多继承继承的特性各种继承关键字extends关键字implements关键字super 与 this 关键字super 关键字this 关键字 final 关键字 前言 在之前的…

sklearn中make_blobs方法:聚类数据生成器

sklearn中make_blobs()方法参数&#xff1a; n_samples:表示数据样本点个数,默认值100 n_features:是每个样本的特征&#xff08;或属性&#xff09;数&#xff0c;也表示数据的维度&#xff0c;默认值是2。默认为 2 维数据&#xff0c;测试选取 2 维数据也方便进行可视化展示…

国产化操作系统改造oracle proc依赖库文件缺失处理

国产化操作系统改造oracle proc依赖库文件缺失处理 文章目录 国产化操作系统改造oracle proc依赖库文件缺失处理1 场景2 排查过程2.1 查看安装库文件2.2 搜索yum源libnsl库版本 3 解决方案3.1 方法一&#xff1a;通过yum源安装libnsl3.2 方法二&#xff1a;从其它正常编译环境拷…

YOLOV7改进-添加SAConv.

链接link 1、放到common文件夹下&#xff0c;最后面加 2、yolo.py下 3、修改配置文件cfg-training&#xff1a;yolov7.yaml 4、一般用在3x3卷积上

【EI检索】第四届公共卫生与数据科学国际学术研讨会(ICPHDS 2023)

第四届公共卫生与数据科学国际学术研讨会&#xff08;ICPHDS 2023&#xff09; 2023 4th International Conference on Public Health and Data Science&#xff08;ICPHDS 2023&#xff09; 第四届公共卫生与数据科学国际学术研讨会&#xff08;ICPHDS 2023&#xff09;将于…

由Qt::BlockingQueuedConnection引起的关闭Qt主页面而后台仍有进程残留

BUG&#xff1a;由Qt::BlockingQueuedConnection引起的关闭Qt主页面而后台仍有进程残留 1、错误代码示例 首先我们看下下面的代码&#xff0c;可以思考一下代码的错误之处 /** BlockingQueueDeadLock.h **/ #pragma once#include <QtWidgets/QMainWindow> #include &q…

shell脚本指令实用

写一个1.sh脚本&#xff0c;将以下内容放到脚本中&#xff1a; 在家目录下创建目录文件&#xff0c;dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中&#xff0c; 把当前目录下的所有脚本文件拷贝到dir2中 把dir2打包并压缩为dir2.tar.xz 再把dir2.tar.xz…

百望云亮相服贸会 重磅发布业财税融Copilot

小望小望&#xff0c;我要一杯拿铁&#xff01; 好的&#xff0c;已下单成功&#xff0c;请问要开具发票嘛&#xff1f; 在获得确认的指令后&#xff0c; 百小望AI智能助手 按用户要求成功开具了一张电子发票&#xff01; 这是2023年服贸会国家会议中心成果发布现场&#x…

SpringBoot 拦截org.thymeleaf.exceptions.TemplateInputException异常

SpringBoot 拦截thymeleaf异常 org.thymeleaf.exceptions.TemplateInputException异常 org.thymeleaf.exceptions.TemplateProcessingE xception: Could not parse as each: "message : xxx " (template: “xxxx” - line xx, col xx) thymeleaf异常复现 你是故意的…