Java 从数组构建堆(Building Heap from Array)

发布时间:2026/9/23 19:44:27

Java 从数组构建堆(Building Heap from Array) 如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。给定一个整数数组arr[] 从给定的数组构建一个最大堆。最大堆是一种完全二叉树其中每个父节点都大于或等于其子节点从而确保最大元素位于根节点。例如输入arr[] [4, 10, 3, 5, 1]输出对应的最大堆输入arr[] [1, 3, 5, 4, 6, 13, 10, 9, 8, 15, 17]输出对应的最大堆【方法】使用递归——时间复杂度为 O(n)空间复杂度为 O(log n)要从数组构建最大堆可以将数组视为完全二叉树并按逆序从最后一个非叶子节点开始堆化到根节点。叶子节点已经满足堆的性质因此我们从最后一个非叶子节点开始对于每个子树我们比较其父节点和子节点。每当子节点大于父节点时我们就交换它们并继续堆化该子树以确保最大堆的性质始终保持不变。笔记 根节点位于索引 0 处。节点 i 的左子节点 - 2*i 1。节点 i 的右子节点 - 2*i 2。节点 i 的父节点 - (i-1)/2。最后一个非叶子节点 - 最后一个节点的父节点 - (n/2) - 1。示例代码public class GfG {// To heapify a subtreestatic void heapify(int arr[], int n, int i){// Initialize largest as rootint largest i;int l 2 * i 1;int r 2 * i 2;// If left child is larger than rootif (l n arr[l] arr[largest])largest l;// If right child is larger than largest so farif (r n arr[r] arr[largest])largest r;// If largest is not rootif (largest ! i) {int temp arr[i];arr[i] arr[largest];arr[largest] temp;// Recursively heapify the affected sub-treeheapify(arr, n, largest);}}// Function to build a Max-Heap from the given arraystatic void buildHeap(int arr[]){int n arr.length;// Index of last non-leaf nodeint startIdx (n / 2) - 1;// Perform reverse level order traversal// from last non-leaf node and heapify// each nodefor (int i startIdx; i 0; i--) {heapify(arr, n, i);}}public static void main(String[] args){// Binary Tree Representation// of input array// 1// / \// 3 5// / \ / \// 4 6 13 10// / \ / \// 9 8 15 17int arr[] {1, 3, 5, 4, 6, 13, 10, 9, 8, 15, 17};int n arr.length;// Function callbuildHeap(arr);for (int i 0; i n; i)System.out.print(arr[i] );System.out.println();// Final Heap:// 17// / \// 15 13// / \ / \// 9 6 5 10// / \ / \// 4 8 3 1}}输出17 15 13 9 6 5 10 4 8 3 1如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。
延伸阅读

更多相关文章

2026/9/23 19:44:24

Java Stream API中Duplicate key异常:原理、排查与解决方案全解析

1. 从一次深夜告警说起:Duplicate key的“惊喜”那天晚上,我正在处理一个数据同步任务,系统突然告警,日志里赫然躺着一条刺眼的错误信息:java.lang.IllegalStateException: Duplicate key。紧接着是一串更具体的堆栈&a…

2026/9/20 0:05:45

Unity跨平台VR交互系统构建:基于SteamVR插件的工程化实战方案

1. 项目概述:为什么我们需要一个跨平台的VR交互方案?如果你正在用Unity开发VR应用,尤其是面向PC VR头显,那么SteamVR插件几乎是你绕不开的工具。但很多开发者,包括我早期也一样,只是把它当作一个“能让手柄…

2026/9/20 0:05:45

Maven父子工程依赖管理:从继承聚合到冲突解决实战

1. 从一次真实的依赖冲突说起最近在带新人做项目,遇到一个典型的场景:一个基于Spring Boot的微服务项目,由十几个模块组成,采用了标准的Maven父子工程结构。新人小张在开发一个名为order-service的子模块时,需要引入一…

2026/9/23 19:39:50

爱的魔力踩坑实录:图解原理助你3天搞定项目落地

爱的魔力踩坑实录:图解原理助你3天搞定项目落地 看了一堆教程,代码能跑,一换到真实项目就崩?别慌,这不是你笨,是教程没讲透底层逻辑。很多开发者卡在“爱的魔力”这种看似简单实则暗藏玄机的功能实现上,表面是逻辑问题,实则是状态管理和异步流程的图…

2026/9/23 19:39:50

下载迅雷5避坑指南:手写实现下载器原理

下载迅雷5避坑指南:手写实现下载器原理 配置环境就卡半天,是不是熟悉的感觉?装个软件还得看脸色,网络一波动进度条就卡死,这种体验确实让人抓狂。其实,很多开发者在本地调试下载任务时,都遇到过类似的“玄学”问题。今天咱们不聊玄学,直接上手,通过…

2026/9/23 19:39:50

基于LSTM的光伏功率预测毕设实战:从数据清洗到误差归因

简介:这份资源是面向计算机相关专业毕业设计学生与项目实战学习者的LSTM短期光伏预测完整项目,选题贴合新能源与深度学习交叉方向,难度适中,可直接作为毕设方案或课程设计参考。压缩包共28个文件,约3.38MB,…

2026/9/23 19:34:45

图解原理:3步修复微信数据文件发生损坏的实战指南

图解原理:3步修复微信数据文件发生损坏的实战指南 官方文档那几万字的技术白皮书,翻两页就头大?遇到 微信数据文件发生损坏 ,后台日志满屏红字,业务中断,这时候再啃理论就是耽误时间。别急,咱们不聊虚的,直接上 图解原理…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码