337.打家劫舍III

news2024/11/25 13:34:10

337. 打家劫舍 III - 力扣(LeetCode)

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

示例 1:

输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7

示例 2:

输入: root = [3,4,5,1,3,null,1]
输出: 9
解释: 小偷一晚能够盗取的最高金额 4 + 5 = 9

提示:

  • 树的节点数在 [1, 104] 范围内
  • 0 <= Node.val <= 104

核心思想:深度搜索,判断每个节点的状态(从最下面开始判断结点状态),然后根据不同的状态进行不同的操作,要是被选中了,那么左右子树不能被选中;如果没有被选中,就是找左右子树中最大的一个进行返回

void fun(struct TreeNode*root,int *yes,int *no){
     int Lyes = 0, Lno = 0;//分别表示左边子树选中、左边子树未选中
     int Ryes = 0, Rno = 0;//与上同理
     if(root->left != NULL){
         //递归左子树
         fun(root->left,&Lyes,&Lno);
     }
     if(root->right != NULL){
         fun(root->right,&Ryes,&Rno);
     }
     //如果当前结点被选上了,那么就是返回左右没选上的节点的最大值加上该节点的值
     *yes = Lno + Rno + root->val;
     //如果当前结点没有别选上,那就从左右子树中找到更大的一颗子树
     *no = max(Lyes,Lno) + max(Ryes,Rno);
 }

参数是树,左边子树最大的值,右边子树最大值

首先定义四个变量分别表示左结点选中与未被选中,右节点别选中和未被选中

然后递归左子树一直到倒数第二层的左节点,然后有一棵高度为2的子树,然后判断是选中这个结点,那么就更新这个结点的值为未被选中的时候的左子树和右子树和该结点的和;如果没有选中这个结点,那么就找出左子树右子树中的最大的一个数值,更新到这个结点;右边也是同理

int rob(struct TreeNode* root){
    void fun();
    int max();

    int yes = 0;
    int no = 0;
    if(root != NULL){
        fun(root,&yes,&no);
    }
    //比较顶点结点选中与不选中的大小,返回更大的值
    return max(yes,no);

}

这个函数中就是找出以根节点为目标节点,找出最大值

完整代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


int rob(struct TreeNode* root){
    void fun();
    int max();

    int yes = 0;
    int no = 0;
    if(root != NULL){
        fun(root,&yes,&no);
    }
    //比较顶点结点选中与不选中的大小,返回更大的值
    return max(yes,no);

}

 void fun(struct TreeNode*root,int *yes,int *no){
     int Lyes = 0, Lno = 0;//分别表示左边子树选中、左边子树未选中
     int Ryes = 0, Rno = 0;//与上同理
     if(root->left != NULL){
         //递归左子树
         fun(root->left,&Lyes,&Lno);
     }
     if(root->right != NULL){
         fun(root->right,&Ryes,&Rno);
     }
     //如果当前结点被选上了,那么就是返回左右没选上的节点的最大值加上该节点的值
     *yes = Lno + Rno + root->val;
     //如果当前结点没有别选上,那就从左右子树中找到更大的一颗子树
     *no = max(Lyes,Lno) + max(Ryes,Rno);
 }

 int max(int x,int y){
     return x>=y?x:y;
 }

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

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

相关文章

SpringSecurity 入门

文章目录 Spring Security概念快速入门案例环境准备Spring配置文件SpringMVC配置文件log4j配置文件web.xmlTomcat插件 整合SpringSecurity 认证操作自定义登录页面关闭CSRF拦截数据库认证加密认证状态记住我授权注解使用标签使用 Spring Security概念 Spring Security是Spring…

竞赛选题 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

常见七大排序算法

目录 前言 冒泡排序 选择排序 插入排序 希尔排序&#xff08;shell&#xff09; 快速排序 归并排序 计数排序 前言 在前面我发布了常见的七大排序算法的相关博客&#xff0c;今天这一篇文章是做一个排序算法的小总结&#xff0c;把前面的博客集中分类到一起&#xff0c;…

公司组织架构图怎么制作?

组织架构图是什么&#xff1f; 组织架构图是一种图形化表示&#xff0c;用于呈现一个组织内部各部门、岗位以及人员之间的关系和层级结构。它是一种重要的工具&#xff0c;能够直观地展示组织的层次关系、职责分工以及管理体系&#xff0c;从而帮助人们更好地了解组织的运作…

MySQL入门指南:数据库操作的基础知识

当谈到关系型数据库管理系统(RDBMS)时&#xff0c;MySQL无疑是最常见和广泛使用的一个。它是一个强大的工具&#xff0c;用于存储、管理和检索数据。在这篇博客中&#xff0c;我们将介绍MySQL的基本知识&#xff0c;包括数据库的操作、数据表的操作以及数据的增删改查~~ 目录 …

JavaScript策略模式

JavaScript策略模式 1 什么是策略模式2 实现一个基础的策略模式3 Javascript中策略模式4 使用策略模式实现缓动动画5 使用策略模式实现表单校验 1 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#…

webpack配置alias后eslint和ts无法识别

背景 我们在 webpack 配置 alias 后&#xff0c;发现项目中引入的时候&#xff0c;还是会报错&#xff0c;如下&#xff1a; 可以看到&#xff0c;有一个是 ts报错&#xff0c;还有一个是 eslint 报错。 解决 ts 报错 tsconfig.json {"compilerOptions": {...&q…

2023 Google 开发者大会,共创、赋能开发者

前言&#xff1a; 9月6日&#xff0c;2023 Google 开发者大会在上海拉开帷幕。在本次大会&#xff0c;Google 将技术灵感带到了中国。在为期两天的大会中&#xff0c;让我印象最为深刻的是&#xff0c;谷歌帮助中国开发者释放潜能&#xff0c;持续创新&#xff0c;落地创意灵感…

【C语言】每日一题(半月斩)——day3

目录 一&#xff0c;选择题 1.已知函数的原型是&#xff1a; int fun(char b[10], int *a); 2、请问下列表达式哪些会被编译器禁止【多选】&#xff08; &#xff09; 3、以下程序的输出结果为&#xff08; &#xff09; 4、下面代码段的输出是&#xff08; &#xff09;…

Chatbot到底提供了哪些便利?来看看“中文版Chatbase”

Chatbot的出现可以说是在极大的程度上改变了企业与客户互动的方式。Chatbot凭借其先进的功能和全天候可用性提供了一系列便捷的功能&#xff0c;为企业和客户提供便利和高效。随着自然语言处理和机器学习算法的进步&#xff0c;Chatbot已经发展到可以提供准确和个性化的响应&am…

【Seata】分布式事务问题和理论基础

目录 1.分布式事务问题 1.1本地事务 1.2分布式事务 2.理论基础 2.1CAP定理 2.1.1一致性 2.1.2可用性 2.1.3分区容错 2.1.4矛盾 2.2BASE理论 2.3解决分布式事务的思路 1.分布式事务问题 1.1本地事务 本地事务&#xff0c;也就是传统的单机事务。在传统数据库事务中…

软件包的管理

概念 在早期Linux系统中&#xff0c;要想在Linux系统中安装软件只能采取编译源码包的方式进行安装&#xff0c;所以早期安装软件是一件非常困难、耗费耐心的事情&#xff0c;而且大多数服务程序仅提供源代码&#xff0c;还需要运维人员编译后自行解决软件之间的依赖关系。所以…

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

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

苹果手机无法正常使用小程序和APP

小程序、APP 已使用了几年&#xff0c;突然大量反馈&#xff1a;苹果手机无法正常使用。但不是全部&#xff0c;只是部分手机。 因为同事苹果手机都能用&#xff0c;所以无法准确判断具体原因。 后来同事苹果手机也无法使用了&#xff0c;显示&#xff1a; 网上搜索结果&…

力扣刷题19-删除链表的倒数第N个节点

题目来源 题目描述&#xff1a; class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {//为了删除的格式一样&#xff0c;引入虚拟头节点ListNode dummyNodenew ListNode(1);dummyNode.nexthead;ListNode slowdummyNode;ListNode fastdummyNode;for(int…

java项目之交通事故档案管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的交通事故档案管理系统。技术交流和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框…

github desktop上传代码

这个很难受&#xff0c;因为遇到了很多问题。最终选择的方式如下&#xff1a; 1&#xff1a;在GitHub上搞一个新建的“repositories”. 这个repositories可以是已经存在的或随便在什么地方新建的。不要紧 2&#xff1a;在“github desktop”上把上面的“repositories”项目cl…

玩转安卓运行速度优化

原文链接 玩转安卓运行速度优化 早在许多年以前写过一篇安卓性能优化文章&#xff0c;时过境迁&#xff0c;很多事情都有了变化&#xff0c;所以再专门针对程序运行速度和渲染的优化&#xff0c;这两方面非常直接的影响应用程序的操作流畅度&#xff0c;也可以称作流畅度优化方…

vue Router路由

编程式导航 | Vue Router 看官方文档 vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。功能包括&#xff1a; 嵌套路由映射动态路由选择模块化、基于组件的路由配置路由参数、查询、通配符展示由 Vue.js 的过…

Golang Linux 安装与环境变量配置

下载 Go 二进制包 wget https://dl.google.com/go/go1.21.1.linux-amd64.tar.gz 解压文件并将其移至 /usr/local 目录 sudo tar -C /usr/local -xzf go1.20.1.linux-amd64.tar.gz -C 选项解压文件到 /usr/local 目录&#xff0c;查看 /usr/local/go 目录的内容 将 Go 二进…