【Leetcode 2673】使二叉树所有路径值相等的最小代价 —— 贪心法

2673. 使二叉树所有路径值相等的最小代价

给你一个整数n表示一棵 满二叉树 里面节点的数目,节点编号从1n。根节点编号为1,树中每个非叶子节点i都有两个孩子,分别是左孩子2 * i和右孩子2 * i + 1

树中每个节点都有一个值,用下标从0开始、长度为n的整数数组cost表示,其中 cost[i]是第i + 1个节点的值。每次操作,你可以将树中 **任意** 节点的值 增加 1` 。你可以执行操作 任意 次。

你的目标是让根到每一个 叶子结点 的路径值相等。请你返回 最少 需要执行增加操作多少次。

注意:

满二叉树 指的是一棵树,它满足树中除了叶子节点外每个节点都恰好有 2 个子节点,且所有叶子节点距离根节点距离相同。
路径值 指的是路径上所有节点的值之和。

示例 1:

输入:n = 7, cost = [1,5,2,2,3,3,1]
输出:6
解释:我们执行以下的增加操作:

  • 将节点 4 的值增加一次。
  • 将节点 3 的值增加三次。
  • 将节点 7 的值增加两次。
    从根到叶子的每一条路径值都为 9 。
    总共增加次数为 1 + 3 + 2 = 6 。
    这是最小的答案。

示例 2:

输入:n = 3, cost = [5,3,3]
输出:0
解释:两条路径已经有相等的路径值,所以不需要执行任何增加操作。

题目分析

贪心算法是一种基于贪心策略的算法设计方法,用于在求解最优化问题时作出一系列局部最优选择,从而达到全局最优的目标。贪心算法通常适用于满足最优子结构性质的问题,即问题的最优解可以通过一系列局部最优解的组合来得到

对于任一叶结点,它的值为 x,它的兄弟节点的值为 y,要想使得根到这两个叶节点的路径值相等,我们只能增加 x 和 y 本身。

由于我们希望操作次数最少,那么应该进行 ∣x−y∣ 次操作,将较小的值增加至与较大的值相等。

待考虑完所有叶节点之后,互为兄弟节点的叶节点的值两两相等(并且根到它们的路径值显然也相等)。如果我们还需要操作某个叶节点,那么为了使得路径值相等,它的兄弟节点同样也需要操作。此时就需要两次操作,但不如直接操作它们的双亲节点,可以省去一次操作。

因此,所有的叶节点都无需进行操作。我们就可以将它们全部移除。为了使得路径值保持不变,我们可以将叶节点的值增加至它们的双亲节点。这样一来,所有的双亲节点都变成了新的叶节点,我们重复进行上述操作即可。当只剩一个节点(根节点)时,就可以得到最终的答案。

由于本题中的树是以数组形式给定的,因此只需要对数组进行一次逆序遍历,就等价于对整个树进行了一次从叶节点开始的,自底向上的遍历

class Solution {public int minIncrements(int n, int[] cost) {int ans = 0;for (int i = n - 2; i > 0; i -= 2) {ans += Math.abs(cost[i] - cost[i + 1]);// 叶节点 i 和 i+1 的双亲节点下标为 i/2(整数除法)cost[i / 2] += Math.max(cost[i], cost[i + 1]);}return ans;}
}

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

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

相关文章

Vscode C/C++ 编译问题

1.最近开始在VScode上编写程序,遇到了以下的坑 This may occur if the process’s executable was changed after the process wasstarted, such as when installing an update. Try re-launching the application orrestarting the machine. 2.原因 这个不是由vs…

技术上的判断令你如何确定现货黄金卖出时机?

要讨论现货黄金卖出时机,我们首先要搞清楚一个问题,就是开仓和平仓的问题,如果投资者已经成了市场中的多头,那他寻找的卖出时机就是要找多头平仓的时机,如果投资者还没开仓,正在寻找市场中的开仓机会&#…

【RS】最新欧空局Sentinel-2卫星数据下载(哨兵1、2、3、5P、6系列)

之前分享过Sentinel2数据下载的方法,但是有粉丝反应欧空局的网站更新了,之前的网站已经不能用了。所以自己抽空研究了一下新版的欧空局网站,今天就和大家分享一下如何使用新版的欧空局网站下载哨兵系列的卫星数据,本文以Sentinel2…

c语言-大小写字母的转换

目录 方法一:库函数直接转换 1、toupper的测试代码 2、tolower的测试代码 方法二:通过修改ASCII码值转换 1、自己实现大写转小写 2、自己实现小写转大写 结语 前言: 在使用c语言写代码时,通常会遇到很多将大小写字母相互…

IP定位在公安部门的使用及其重要性

随着信息技术的迅猛发展,互联网已成为现代社会不可或缺的一部分。然而,与此同时,网络犯罪也呈现出日益猖獗的趋势,给社会治安带来了极大的挑战。在这样的背景下,IP定位技术在公安部门的应用显得尤为重要。本文将对IP定…

geoserver+mapbox-gl 离线部署矢量切片地图服务学习笔记

geoserver安装 geoserver的安装包可以在官网下载Download - GeoServer,想要选择版本点击Archived找到指定版本进行下载http://geoserver.org/download/ (如果网络不稳定,也可以直接使用下面的下载地址) geoserver-2.15.0.rar资…

手把手带你申请【Sora】内测资格,附申请提示词

自从OpenAI发布了Sora之后,由于其流畅的画面,极高的真实度的60秒超长视频,瞬间秒杀当前市面上所有的视频胜场模型。 附上体验地址:https://openai.com/research/video-generation-models-as-world-simulators 相信Sora发布之后也…

PRewrite: Prompt Rewriting with Reinforcement Learning

PRewrite: Prompt Rewriting with Reinforcement Learning 基本信息 2024-01谷歌团队提交到arXiv 博客贡献人 徐宁 作者 Weize Kong,Spurthi Amba Hombaiah,Mingyang Zhang 摘要 工程化的启发式编写对于LLM(大型语言模型)应…

uniapp 滑动页面至某个元素或顶部

直接上代码: uni.pageScrollTo({selector: #top, // 需要返回顶部的元素id或class名称duration: 300 // 过渡时间(单位为ms) }); 官方文档:

什么是云游戏?云游戏平台可以运行3A游戏吗?

对于不熟悉游戏行业的人来说,面对云游戏可能会有一个疑问——除了单机游戏,现在所有游戏不都是联网玩吗?云游戏和网络游戏有什么区别? 实际上,云游戏和传统网络游戏有着本质的不同。 传统网络游戏需要玩家先下载并在本…

工时管理软件:为什么企业需要工时跟踪?

工时跟踪对于企业经营来说,可能不是首要事项。工时跟踪有什么用? 管理学大师彼得德鲁克曾说过:If you can’t measure it, you can’t improve it(如果无法衡量,就无法改进)。企业经营也是同样道理&#x…

注解校验备忘

NotNull 可用于一切包装类型 NotEmpty 用于String类型,表示不为空,并且长度大于0 用于List集合,表示不为空,并且size大于0 NotBlank 只用于字符串,去除两端空格后,长度大于0 Min和Max 包含当前值&a…

基于Python dlib的人脸识别的上课考勤管理系统(V2.0)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

2024年Android开发陷入饱和,想拿高工资

前言 从16年毕业至今,就职过两家公司,大大小小项目做了几个,非常感谢我的两位老大,在我的android成长路上给予我很多指导,亦师亦友的关系。 从年前至今参加面试了很多公司,也收到了几家巨头的offer&#…

2024Java大厂面试真题,java高级开发面试经验

概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,…

一次线上JVM GC 长暂停排查,加班搞了好久

给大家分享一篇我在知乎上看到的,针对长时间 GC 问题排查定位过程的文章。 最终原因定位到 swap 空间上,是我未曾设想过的角度,因为常规的 GC 问题,相当大一部分原因最终定位出来都是代码相关、流量相关、配置相关的,…

需求并行开发场景,如何高效发布

云布道师 微服务架构下,每个应用服务独立开发、独立发布,小步快跑,持续快速交付业务需求。多人协同开发同一个应用时,分支开发模式是一个适合的协同方案。该模式下一个需求或任务通常对应一个 feature 分支,多个需求一…

WSL2安装+深度学习环境配置

WSL2安装深度学习环境配置 1 安装WSL22 配置深度学习环境1.1 设置用户名、密码1.2 安装cuda修改WSL安装路径 1.3 安装Anaconda 参考:搭建Windows Linux子系统(WSL2)CUDA环境 参考:深度学习环境配置 WindowsWSL2 1 安装WSL2 WSL …

《计算机程序的构造和解释》:计算思维的圣经,引领你走向编程的巅峰

写在前面 《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs,简记为SICP)是MIT的基础课教材,出版后引起计算机教育界的广泛关注,对推动全世界大学计算机科学技术教育的发展和成熟产生了…

【QT】自定义控件的示例

自定义控件(很重要) 什么是自定义控件? 顾名思义就是创建一个窗口,放入多个控件,拼接起来,一起使用。 为什么需要它? 需求,假设有100个窗口,那如果有两个控件同时被使…