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如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。

相关新闻

最新新闻

IDEA创建Spring Boot 2.x与JDK 8项目:从版本锁定到环境配置全链路实践

IDEA创建Spring Boot 2.x与JDK 8项目:从版本锁定到环境配置全链路实践

1. 项目缘起:一个看似简单却暗藏玄机的需求最近在帮团队新成员搭建开发环境,一个最基础的需求浮出水面:用 IntelliJ IDEA 创建一个基于 JDK 8 的 Spring Boot 2.x.x 版本项目。这个需求听起来平平无奇,不就是选个版本、点几下鼠标…

2026/8/6 2:04:06
Pydantic:Python数据验证的基石与LangChain结构化输出的核心引擎

Pydantic:Python数据验证的基石与LangChain结构化输出的核心引擎

在Python生态系统中,数据验证与结构化处理一直是构建健壮应用的关键环节。Pydantic凭借其基于类型注解的优雅设计,不仅成为FastAPI等现代Web框架的标配,更在AI应用开发中扮演着不可替代的角色。特别是在LangChain生态中,Pydantic已…

2026/8/6 2:04:06
WarcraftHelper终极指南:5步解锁魔兽争霸III完整游戏体验

WarcraftHelper终极指南:5步解锁魔兽争霸III完整游戏体验

WarcraftHelper终极指南:5步解锁魔兽争霸III完整游戏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III的老旧限制而烦…

2026/8/6 2:04:06
电工实操入门:从安全规范、工具使用到家庭电路接线与故障排查

电工实操入门:从安全规范、工具使用到家庭电路接线与故障排查

在实际电气工程、设备维护、家庭电路改造或职业资格认证中,电工实操能力是区分理论知识与动手技能的关键。许多初学者或跨行业从业者,面对万用表、电线、开关、断路器时,常常感到无从下手,或者仅能照图接线,却不理解每…

2026/8/6 2:04:06
Godot 4资源表格插件:批量管理游戏配置数据的终极效率工具

Godot 4资源表格插件:批量管理游戏配置数据的终极效率工具

1. 项目概述:为什么我们需要一个“资源表格”插件?如果你在Godot 4里做过稍微复杂点的项目,尤其是那些需要管理大量配置数据、角色属性、物品库或者对话文本的,那你肯定对.tres或.res资源文件又爱又恨。爱的是它的强类型和序列化能…

2026/8/6 2:04:06
League Akari:英雄联盟玩家终极本地化工具包完全指南

League Akari:英雄联盟玩家终极本地化工具包完全指南

League Akari:英雄联盟玩家终极本地化工具包完全指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari 是一个基于官方…

2026/8/6 1:59:06