LeetCode337. 打家劫舍III
// 很好的一道题目,既考察递归又考察动归
// 这个版本超时了,原因是暴搜
// 很显然这里使用的是前序,那是不是应该考虑后序?public int rob(TreeNode root) {if (root == null) {return 0;}if (root.left == null && root.right == null) {return root.val;}if (root.left != null && root.right != null) {return Math.max(rob(root.left) + rob(root.right), root.val + rob(root.left.left) + rob(root.left.right) + rob(root.right.left) + rob(root.right.right));}if (root.left != null) {return Math.max(rob(root.left) + rob(root.right), root.val + rob(root.left.left) + rob(root.left.right));}return Math.max(rob(root.left) + rob(root.right), root.val + rob(root.right.left) + rob(root.right.right));}
上面的代码其实非常的丑陋,就算暴搜也不应该这样写,而是这样
public int rob(TreeNode root) {if (root == null)return 0;int money = root.val;if (root.left != null) {money += rob(root.left.left) + rob(root.left.right);}if (root.right != null) {money += rob(root.right.left) + rob(root.right.right);}return Math.max(money, rob(root.left) + rob(root.right));}
但这题说到底是树形DP题目,最优解法应该是使用DP,如下
public int rob(TreeNode root) {int[] res = robHelper(root);return Math.max(res[0], res[1]); }private int[] robHelper(TreeNode root) {int[] res = new int[2];if (root == null) {return res;}int[] left = robHelper(root.left);int[] right = robHelper(root.right);// 重点:root不偷,下面的结点一定都是偷吗// 分为左右结点,像case1:2偷值为2,不偷为3// 如果root不偷,下面的左右都偷反而不一定是最大值// root不偷,下面的结点有偷与不偷的权利,根据利益最大化选择偷与不偷// 但root偷,下面的结点一定不能偷// res[0] = left[1] + right[1];res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);res[1] = root.val + left[0] + right[0];return res;}
相关文章:
LeetCode337. 打家劫舍III
// 很好的一道题目,既考察递归又考察动归 // 这个版本超时了,原因是暴搜 // 很显然这里使用的是前序,那是不是应该考虑后序?public int rob(TreeNode root) {if (root null) {return 0;}if (root.left null && root.rig…...
python基础(二) 包和import
包的创建 文件创建命令 在 Django 中,python manage.py startapp first_app 这一行命令的作用是创建一个新的应用(app),名为 first_app。在 Django 项目中,"app" 是实现某些功能模块的单独部分,…...
选址模型 | 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab) 问题建模:首先,需要将电动汽车充电站选址与定容问题进行数学建模,确定目标函数和约束…...
WPF入门教学十 资源与字典
在WPF(Windows Presentation Foundation)中,资源与字典是用于管理和重用UI元素的重要机制。它们不仅有助于保持XAML代码的整洁,还能提升应用程序的性能和可维护性。以下是关于WPF资源与字典的详细说明: 静态资源与动态…...
Ubuntu20.04配置NVIDIA+CUDA12.2+CUDNN【附所有下载资源】【亲测有效】【非常详细】
Ubuntu20.04 安装 cudatookit 12.2 cudnn 安装_ubuntu安装cuda toolkit-CSDN博客【最新】cuDNN在CUDA11.7Ubuntu20.04下的安装及卸载_cuda11.7对应的cudnn-CSDN博客...
Golang | Leetcode Golang题解之第424题替换后的最长重复字符
题目: 题解: func characterReplacement(s string, k int) int {cnt : [26]int{}maxCnt, left : 0, 0for right, ch : range s {cnt[ch-A]maxCnt max(maxCnt, cnt[ch-A])if right-left1-maxCnt > k {cnt[s[left]-A]--left}}return len(s) - left }f…...
软考高级:系统安全 -区块链特点:去中心化、开放性、自治性、安全性、匿名性
讲解 生活化例子 想象一下,你和朋友们玩一个共享账本的游戏。每个人都可以在账本上记账,没人可以单独改动账本,大家都可以随时查看账本内容,也不用再信任某个单独的人来管理账本。这就类似于区块链的工作原理。 概念讲解 去中…...
Pandas 数据分析入门详解
今日内容大纲介绍 DataFrame读写文件 DataFrame加载部分数据 DataFrame分组聚合计算 DataFrame常用排序方式 1.DataFrame-保存数据到文件 格式 df对象.to_数据格式(路径) # 例如: df.to_csv(data/abc.csv) 代码演示 如要保存的对象是计算的中间结果,或者以…...
【网络】高级IO——epoll版本TCP服务器初阶
目录 前言 一,epoll的三个系统调用接口 1.1.epoll_create函数 1.1.1.epoll_create函数干了什么 1.2. epoll_ctl函数 1.2.1.epoll_ctl函数函数干了什么 1.3.epoll_wait函数 1.3.1.epoll_wait到底干了什么 1.4.epoll的工作过程中内核在干什么 二,…...
xml中的转义字符
文章目录 xml中的转义字符 xml中的转义字符 &对应的字符是& <对应的字符是< >对应的字符是> "对应的字符是" '对应的字符是转义的实体引用虽然简单易用,但是需要记忆,而且如果字符串中包含大量的特殊字…...
Webpack:现代前端项目的强大打包工具
在现代前端开发中,随着应用的复杂性不断提高,我们需要一种工具来管理项目的依赖、优化代码结构并打包资源文件。Webpack 就是这样一个强大的打包工具,它为前端开发者提供了灵活、强大且可扩展的功能。本文将介绍 Webpack 的基本概念、安装与使…...
以root用户登陆ubuntu的桌面环境
去我的个人博客观看,观感更佳哦,😙😙 前言 在学习Linux的时候,经常都需要使用sudo权限来对配置文件进行修改,常用的方法就是用vim编辑器在命令行界面进行修改,比如sudo vim /etc/profile&#…...
《系统架构设计师教程(第2版)》第17章-通信系统架构设计理论与实践-04-其他网络架构(存储网络架构、软件定义网络架构)
文章目录 1. 存储网络架构1.1 网络连接存储 (NAS)1.2 存储区域网络(SAN) 2. 软件定义网络架构2.1 软件定义网络(SDN)2.2 SDN架构2.3 相关技术2.3.1 控制平面技术2.3.2 数据平面技术1) 硬件处理方式4) 软件处…...
大话Python|基础语法(上)
一、单行注释 以下代码输出一个Hello World!字符串 在Python代码中,注释会自动被Python解析器忽略 print(Hello World) 二、多行注释 在Python代码中,注释一共有两种形式; 1、单行注释:注释的内容只有一行 2、多行…...
crosscrossover24支持的游戏有那些
CrossOver刚刚更新了24版本,支持《地平线零之曙光》、《以撒的结合:重生》等游戏。一起来看看它有哪些更新吧!之前买过23版的用户可以在1年之内免费升级哦,点击这里查看升级教程。 一、功能优化 - 更新 Wine 至最新的稳定版 Wine …...
如何免费调用GPT API进行自然语言处理
在当今这个信息爆炸的时代,自然语言处理(NLP)技术正逐步渗透到我们生活的各个方面,从智能客服到内容创作,无一不彰显着其强大的应用价值。而GPT(Generative Pre-trained Transformer)作为NLP领域…...
vue无感刷新Token并重新请求
vue 拦截器拦截401重新请求Token 无感刷新Token 之后重新请求报401的接口 instance.interceptors.response.use(async (response) > {let { data } response;if (data.code 401 || data.code 403) {return await handleExpiredToken(response.config);}if (data.code ! …...
C++和OpenGL实现3D游戏编程【连载10】——纹理的半透明显示
1、本节实现的内容 上一节课我们讲到了图片的镂空显示,它能在显示图片时去除指定颜色的背景,那么这节课我们来说一下图片的半透明显示效果,半透明效果能给画面带来更高质量的提升,使图片显示的更自然,产生更真实的效果。下面是一个气泡向上漂浮的效果。 气泡效果 2、非纹…...
50页PPT麦肯锡精益运营转型五步法
读者朋友大家好,最近有会员朋友咨询晓雯,需要《 50页PPT麦肯锡精益运营转型五步法》资料,欢迎大家下载学习。 知识星球已上传的资料链接: 企业架构 企业架构 (EA) 设计咨询项目-企业架构治理(EAM)现状诊断 105页PPTHW企业架构设…...
Fyne ( go跨平台GUI )中文文档-小部件 (五)
本文档注意参考官网(developer.fyne.io/) 编写, 只保留基本用法 go代码展示为Go 1.16 及更高版本, ide为goland2021.2 这是一个系列文章: Fyne ( go跨平台GUI )中文文档-入门(一)-CSDN博客 Fyne ( go跨平台GUI )中文文档-Fyne总览(二)-CSDN博客 Fyne ( go跨平台GUI…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
