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

Leetcode 337 打家劫舍 III

题意理解:

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

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

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

        

        这里的打家劫舍不同之处在于:状态转移是在一颗树上

        限制要求是:相邻不能偷

        所以:

        偷了根节点,左右孩子节点不能偷

        偷了左右孩子,根节点不能偷

解题思路:

        这里使用回溯法来遍历每个节点

        每个节点都有两种状态:偷当前节点,和不偷当前节点

        所以我们在每层设置一个dp数组: dp[0]表示不偷所能获得的最大金额, dp[1]表示偷所能获得的最大金额。

        所以每层返回一个dp数组。

        dp[0]=max(偷左,不偷左)+ max(偷右,不偷右)

        dp[1]=不偷左+不偷右+根

        最后的结果是:

        max(dp[0],dp[1])

1.解题

    public int rob(TreeNode root) {int[] dp=new int[2];dp=travel(root);return Math.max(dp[0],dp[1]);}public int[] travel(TreeNode root){int[] dp=new int[2];if(root==null) return dp;int[] left_dp=travel(root.left);int[] right_dp=travel(root.right);dp[0]=Math.max(left_dp[0],left_dp[1])+Math.max(right_dp[0],right_dp[1]);dp[1]=left_dp[0]+right_dp[0]+root.val;return dp;}

2.分析

时间复杂度:O(n)

空间复杂度:O(n)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 推荐一款开源的跨平台划词翻译和OCR翻译软件:Pot
  • Open CASCADE学习|保存为STL文件
  • thinkphp6入门(18)-- 中间件中除了handle函数,还可以有其它函数吗
  • re:从0开始的CSS学习之路 5. 颜色单位
  • 【教程】Linux使用git自动备份和使用支持文件恢复的rm命令
  • 93 log4j-slf4j-impl 搭配上 log4j-to-slf4j 导致的 StackOverflow
  • Rust语言入门小结(第1篇)
  • SQL,HQL刷题,尚硅谷
  • 【MySQL】字符串函数的学习
  • 使用代理IP有风险吗?如何安全使用代理IP?
  • STM32 硬件随机数发生器(RNG)
  • GNU C和标准C
  • Redis(十三)缓存双写一致性策略
  • 在Ubuntu22.04上部署ComfyUI
  • 【51单片机】外部中断和定时器中断
  • [译] React v16.8: 含有Hooks的版本
  • ECMAScript入门(七)--Module语法
  • export和import的用法总结
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JSDuck 与 AngularJS 融合技巧
  • JS数组方法汇总
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端性能优化--懒加载和预加载
  • 入门到放弃node系列之Hello Word篇
  • 数据可视化之 Sankey 桑基图的实现
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 正则表达式-基础知识Review
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #QT 笔记一
  • #VERDI# 关于如何查看FSM状态机的方法
  • #Z0458. 树的中心2
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (八)c52学习之旅-中断实验
  • (第二周)效能测试
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)fock函数详解
  • (转)ORM
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .equals()到底是什么意思?
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • /*在DataTable中更新、删除数据*/
  • @AliasFor 使用
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @vue/cli脚手架
  • []FET-430SIM508 研究日志 11.3.31
  • [Android]Tool-Systrace
  • [C++] vector对比list deque的引出
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [Fri 26 Jun 2015 ~ Thu 2 Jul 2015] Deep Learning in arxiv