337. 打家劫舍 III(leetcode)

news/2024/11/16 2:49:19/文章来源:https://www.cnblogs.com/lxl-233/p/18397590

https://leetcode.cn/problems/house-robber-iii/description/
基础树形dp,要点是f的定义
灵神讲的很好:https://www.bilibili.com/video/BV1vu4y1f7dn/?vd_source=1bb76d0400eba0d49ad4c1dd07bc4249

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int rob(TreeNode root) {// 树形dp// 根据每一个节点都有选与不选两种状态,以此来作为f定义,划分子集// 以是否选择当前节点来划分子集// dfs(i)表示以i为根节点获取的最大金额// dfs(i)=// 1.选i这个节点,则为 left[1]+right[1]+node.val; //1表示不偷当前节点获得的最大金额,0表示偷// 2.不选,则为 max(left[0],left[1]) + max(right[0],right[1]);int[] res=dfs(root);return Math.max(res[0],res[1]);}// 后序遍历,从下到上依次计算递推,返回值是两个子集,需要求maxint[] dfs(TreeNode root){if(root == null)return new int[]{0,0};// 没有节点,则最大金额为0int[] left=dfs(root.left);int[] right=dfs(root.right);int v1=left[1] + right[1] + root.val; // 选当前节点int v2=Math.max(left[0],left[1])+Math.max(right[0],right[1]);return new int[]{v1,v2}; // 第一位是选当前节点,第二位是不选}
}

 

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

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

相关文章

深度学习环境配置(windows 11)

安装Anaconda下载地址运行安装程序,记得要勾选创建系统变量,忘记勾选的请参考anaconda如何配置环境变量。正确配置后,在cmd命令行中输入conda --version后可以输出conda版本信息。附上conda常用操作命令: #创建环境(指定python版本) conda create -n NAME python=*.*#激活…

Text Augmented Spatial-aware Zero-shot Referring Image Segmentation论文阅读笔记(EMNLP23 Findings)

Motivation & Method 关注的任务为zero-shot referring image segmentation,模型无法获得pixel-level的分割标注。之前的方法通常使用预训练的多模态模型如CLIP,然而CLIP使用图像文本对进行训练,难以做到image local patch与referring sentence的细粒度对齐。为此作者提…

Error response from daemon: This node is not a swarm manager.

转载请注明出处:在环境上通过 docker 查看节点列表时,报错如下:解决方法: 具体code如下:root@controller1:~# docker swarm init --advertise-addr 127.0.0.1 Error response from daemon: This node is already part of a swarm. Use "docker swarm leave" to …

全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、树、哈希表、图和堆

数据结构是计算机科学中的一种组织和存储数据的方式,它决定了数据的访问方式和操作效率,数据结构的选择和实现对程序的性能和设计至关重要。本文主要讲述了如何使用Python语言和内置库实现常见数据结构。全网最适合入门的面向对象编程教程:45 Python 实现常见数据结构-链表、…

Unicode编码介绍

什么是Unicode编码? Unicode是字符编码规范,它定义了所有文字的编码规则。说通俗点就是它按照某个规则给每个字符都分配了一个数字编号(比如:A的编号为65或0x0041,万的编号为19981或0x4e0d),相当于是一个编号库。这个数字编号也叫Unicode码。最开始这个编号使用2个字节表…

LeetCode题集-2 - 两数相加

递归法和迭代法有什么差别,通过两数相加算法来搞明白,一举多得这个题目是什么意思呢?简单来说就是把两个链表平铺开,头节点对齐,然后从头开始相同的节点相加,满10则进位,进位值与下个节点继续相加,当一个链表没有节点时候则可以把没有节点当做0继续与有节点的链表继续相…

pytesseract实现识别pdf文件并将内容写入word文档中

步骤一:先安装tesseract-ocr-w64-setup-5.4.0.20240606 (安装记得语言包只安装需要的即可) 步骤二:将安装目录添加到系统环境变量中 (网上很多这一步之后就说可以运行程序了其实不然,一直报错没有添加到环境变量中) 步骤三:第四步:可以正常运行啦 =================…

消息中间件ms

消息中间件rabbitmq如何保证数据不丢失 MQ高级搜消息可靠性 常用于mq重复消费问题解决 搜消费者重复消息问题延迟队列有了解过吗?(私信交换机) 搜延迟消息如果有100w的消息堆积到mq怎么办(消息堆积)高可用机制了解过吗

9种最高频的架构模式

这9种最高频的架构模式了解一下,什么样的业务适合事件驱动,什么样的业务适合ETL,什么类型的服务依赖streaming,分别有什么样的特征最好事前准备,我的专栏会分析每种架构的方法论和面试注意事项,感兴趣的可以关注

gadget驱动框架(一)

之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习。本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.123。 gadget驱动框架 gadget源码主要在:drivers/usb/gadget,以虚拟串口为例,对源文件做简单说…

Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model(2024,8)

Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model(2024,8) Paper TODO: 目前没有开源代码,实时关注一下official code,Meta的工作基本开源的.本文给出了一种新的T2I的方法. lucidrains的代码本质是将LLM的transformer和图像中的diffusion结…

代码整洁之道--读书笔记(1)

代码整洁之道简介: 本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更…