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

【力扣每日一题】2023.9.18 打家劫舍Ⅲ

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

今天是打家劫舍3,明天估计就是打家劫舍4了。

今天的打家劫舍不太一样,改成二叉树了,不过规则没有变,我们还是不能偷相邻的节点。

此时房屋的排序不是像之前那样是线性的了,也就是说我们无法使用之前的常规的动态规划来解决这道题,不过我们仍可以使用动态规划的思想来解决。

动态规划本质上就是状态转移。在线性排列的房屋之中,我们dp[ i ]等于截止到第 i 间房,我们能获取的最大的值是多少。

在二叉树之中我们同样也能沿用这个dp数组的含义,不过不同的是二叉树有些许不同,因为线性房屋相邻的房屋只有左右两个。而二叉树的节点中,相邻的有父节点和两个子节点一共三个。

在线性表中,我选择了下标为 i 的房间,我就不能选择 i - 1 和 i + 1 。

在二叉树中,我选择了一个节点,则它的左右子节点和父节点都不能选。

那么反过来呢?我不选择当前节点,那么我就可以选择左右两个子节点和父节点。

因为有两种情况,因此此时的dp数组应该是二维的,分别存放的是我选择当前节点所能获取的最大值以及我不选择当前节点所能获取的最大值。

现在我们来找找递推公式。

如果我选择当前节点,那么我能获取的最大值就是当前节点的值,以及左右两个子节点中不选择自己节点能获取到的最大值。

如果我不选择当前节点,那么我能获取的最大值就是左右两个子节点中,能获取的最大值。

以下动图以示例一为例,大家可以结合代码看看。

最后就是具体的做法,我们要求一个节点的能获取的最大值,我们就需要知道它的两个子节点能获取到的最大值,因此我们使用递归去遍历二叉树,至下而上去递推。

最终我们将根节点的能获取的最大值中(选择根节点能获取的最大值和不选择根节点能获取的最大值)取一个最大的返回出去。

代码:

class Solution {
public://返回出去的数组一共两个元素,第一个表示偷本节点获取的最大值,第二个表示不偷本节点获取的最大值vector<int> find(TreeNode* root){//如果当前节点为空,那么偷与不偷都是0if(root==nullptr) return {0,0}; auto l=find(root->left);auto r=find(root->right);//偷本节点获取的最大值就是本节点的值再加上两个子节点中不偷本节点的最大值(root->val+l[1]+r[1])//不偷本节点获取的最大值就是两个子节点中,分别取一个最大的值然后加起来.return {root->val+l[1]+r[1],max(l[0],l[1])+max(r[0],r[1])};}int rob(TreeNode* root) {vector<int>res=find(root);return max(res[0],res[1]);}
};

相关文章:

【力扣每日一题】2023.9.18 打家劫舍Ⅲ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 今天是打家劫舍3&#xff0c;明天估计就是打家劫舍4了。 今天的打家劫舍不太一样&#xff0c;改成二叉树了&#xff0c;不过规则没有变&…...

Docker基础学习

Docker 学习目标&#xff1a; 掌握Docker基础知识&#xff0c;能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用应用的安装 掌握docker迁移与备份相关命令 能够运用Dockerfile编写创建容器的脚本 能够…...

esbuild中文文档-路径解析配置项(Path resolution - Alias、Conditions)

文章目录 路径解析配置项 Path resolution别名 Alias条件解析 Conditionsconditions是如何工作的 结语 哈喽&#xff0c;大家好&#xff01;我是「励志前端小黑哥」&#xff0c;我带着最新发布的文章又来了&#xff01; 老规矩&#xff0c;小手动起来~点赞关注不迷路&#xff0…...

您的应用存在隐藏最近任务列表名称的行为,不符合华为应用市场审核标准

最近各家应用市场&#xff0c;唯独华为审核被拒了。。理由是您的应用存在隐藏最近任务列表名称的行为&#xff0c;不符合华为应用市场审核标准。 根据华为给出的视频&#xff0c;app在任务队列&#xff08;也就是俗称的安卓多任务管理后台&#xff09;不显示应用名。因为我们ap…...

Spring的 webFlux 和 webMVC

看到一个测评文章&#xff0c;并发在300的时候webMVC 和 webFlux的处理能力不相上下&#xff0c; 当并发达到3000的时候, webFlux明显优于webMVC, 有图有真相&#xff0c; 我信了. webMVC 是 one-request-one thread 堵塞模式, flux是非阻塞模式&#xff0c; 是spring家族系列…...

【洛谷算法题】P5706-再分肥宅水【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5706-再分肥宅水【入门1顺序结构】&#x1f30f;题目描述&#x1f30f;输入格式…...

android studio环境搭建让你的开发之旅更加简单

示例示例Android Studio环境搭建&#xff1a;下载并安装Android Studio&#xff1a;从官网下载Android Studio&#xff0c;然后双击安装文件&#xff0c;按照提示进行安装&#xff0c;安装完成之后&#xff0c;可以在桌面上找到Android Studio的快捷方式。 Android Studio环境…...

Java面试_并发编程_线程基础

Java面试_并发编程_线程基础 线程基础线程和进程的区别(出现频率: 3⭐)并行和并发的区别(出现频率: 2⭐)线程的创建(出现频率: 4⭐)线程的状态(出现频率: 4⭐)让线程按顺序执行(出现频率: 3⭐)notify()和notifyAll()有什么区别(出现频率: 2⭐)wait方法和sleep方法的区别(出现频…...

基于Java的高校实习管理系统设计与实现(亮点:实习记录、实习打分、实习作业,功能新颖、老师没见过、当场唬住!)

高校实习管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统主要功能5.1…...

傅里叶变换

傅里叶变换常用于缺陷检测项目&#xff0c;对于一些背景偏暗&#xff0c;对比度不明显的场景&#xff0c;傅里叶变换可以起到提升对比度的效果。傅里叶变换从频域角度来处理&#xff0c;对于一些图像像素尺寸大的图像&#xff0c;算法时间往往时间达到1s以上&#xff0c;对于一…...

Vue Grid Layout -️ 适用Vue.js的栅格布局系统,在vue3+上使用

文章目录 1、官网简介2、在vue3中使用1)、需要导入vue3支持的版本插件2)、在mian.js里引入&#xff1a;3)、在组件中使用 3、layout布局的计算逻辑4、 gridLayout 的属性 该栅格系统目前对 vue2 的支持是最好的&#xff0c;vue3 是需要用插件支持的&#xff0c;会在小节详细讲解…...

Electron(v26.2.1)无法加载React Developer Tools(v4.28.0)

一开始按照electron官网上的 开发者工具扩展 教程设置React Developer Tools时&#xff0c;重启项目后并没有按照预期成功加载React Developer Tools&#xff0c;而且控制台报错&#xff1a; Permission scripting is unknown or URL pattern is malformed.查了下原因是因为Re…...

网站降权的康复办法(详解百度SEO数据分析)

随着搜索引擎算法的不断升级&#xff0c;很多网站在SEO优化过程中遭遇到降权的情况。如果您的网站也遭遇到了类似的问题&#xff0c;不必惊慌失措。本文将为您详细介绍网站降权恢复的方法&#xff0c;包括百度SEO数据分析、网站收录少的5个原因、网站被降权的6个因素以及百度SE…...

非对称加密、解密原理及openssl中的RSA示例代码

一、【原理简介】非对称加密 非对称加密&#xff0c;也被称为公钥加密&#xff0c;其中使用一对相关的密钥&#xff1a;一个公钥和一个私钥。公钥用于加密数据&#xff0c;私钥用于解密数据。公钥可以公开分享&#xff0c;而私钥必须保密。 密钥生成: 当一个用户或设备希望使用…...

基于springboot漫画管理系统springboot001

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…...

【探索C++】string类详解

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…...

python 第一次作业

1.使用turtle换一个五环 2.设计这样一个程序&#xff1a;输入一个数字 判断它是不是一个质数 使用turtle换一个五环&#xff1a; >>> import turtle #导入模块 >>> turtle.width(10) #设置圆圈宽度 >>> turtle.color("blue&qu…...

个人博客网站一揽子:Docker建站(Nginx、Wordpress、MySql)

前言 既然安装了Docker&#xff0c;那就不妨建立一个自己的博客网站。实现内外网隔离网站部署&#xff0c;更安全。 1.创建Docker子网络 首先创建一个Docker虚拟子网&#xff1a; sudo docker network create wpnt检查是否建立成功&#xff1a; sudo docker network ls最后…...

Unity 课时 4 : No.4 模拟面试题

课时 4 : No.4 模拟面试题 C# 1. 请说明字符串中 string str null string str “” string str string.Empty 三者的区别 第一个未作初始化没有值, 第二个为空字符串, 答案&#xff1a; str null 在堆中没有分配内存地址 str "" 和 string.Empty 一样都是…...

Golang 基础面试题 01

Golang 面试题合集.png 背景 在之前的文章中分享了 k8s 相关的面试题&#xff0c;本文我们重点来讨论和 k8s 密切相关的 Go 语言面试题。 这几年随着云原生的兴起&#xff0c;大部分后端开发者&#xff0c;特别是 Java 开发者都或多或少的想学习一些 Go 相关的技能&#xff0c;…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...