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

发布时间:2026/11/13 4:31:53

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/11/12 9:29:42

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

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

2026/11/11 13:00:23

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

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

2026/11/12 17:35:05

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

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

2026/11/13 4:26:57

电工证插线网上查询怎么查?急需特种作业证才能上岗找工作

电工证插线网上查询怎么查?急需特种作业证才能上岗找工作 你有没有这样的经历?找电工相关工作被用人单位问:“你的电工证有没有?”你却一愣,不知道怎么查,或者根本没听说过“电工证插线”这个说法?别急,今天我们就来聊聊这个话题,帮你解决“电工证插…

2026/11/13 4:26:57

河南电工证怎么办理官方回应实操考试心里没底怕挂科

河南电工证怎么办理官方回应实操考试心里没底怕挂科 实操考试心里没底怕挂科?河南电工证怎么办理,官方回应来了,帮你把关关键流程和避坑技巧。很多人考电工证,最大的拦路虎就是实操考试,怕挂科、怕流程复杂、怕被坑钱,今天就从一个郑州项目现场管理员的…

2026/11/13 4:26:57

广州低压电工证打印值不值得考?怕考不过白交培训费?

广州低压电工证打印值不值得考?怕考不过白交培训费? 你是不是也担心自己花了几千块报名,结果考试挂了,钱打水漂?广州低压电工证打印看似简单,实则套路不少,很多人在报名前都没搞清楚自己到底适不适合考,或者是不是真的有必要考。别急,今天就来给你讲…

2026/11/13 4:26:57

广州低压电工证打印怎么考 值不值得考

广州低压电工证打印怎么考 值不值得考 实操考试心里没底怕挂科,你不是一个人。特别是像你这样在漯河做中小施工企业的负责人,面对广州低压电工证打印这件事,担心流程复杂、考试不过、证书无效,这些焦虑其实都很正常。…

2026/11/13 4:21:56

电工证怎么升级技工 郑州报考避坑指南怎么避

电工证怎么升级技工 郑州报考避坑指南怎么避 实操考试心里没底怕挂科?别急,咱就拿郑州电工证升级技工的真实案例来说,让你少走弯路、少踩坑。今天这事儿就发生在信阳浉河区一家中小施工企业,老张头就是被实操考试折磨得差点放弃升级,最后却靠着一个“郑…

2026/11/12 20:35:13

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/12 22:10:13

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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