Build Min Heap Using Array

2024-09-04 15:32
文章标签 build heap using array min

本文主要是介绍Build Min Heap Using Array,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Build min-heap using Array.

思路1:首先明白heap的底层implementation就是array,从0开始的parent和left,right的关系为,

如果现在的node index为i,那么parent index就是 (i-1)/2;   left  为2*i+1, right为 2*i+2;

         ( i-1 ) / 2

             i

    2*i+1      2*i+2

记住以上关系图,就可以明白heap的index之间的关系了。

那么build up min heap,有两种方法,一种方法是nlogn的,就是不停的加进去,然后往上swap,把父节点大的点往下挪,小的node往上移动,一直移动到头部(也就是根部)。每次swap是lgn的复杂度,然后总共是nlgn的复杂度。

public class Solution {/** @param A: Given an integer array* @return: nothing*/public void heapify(int[] A) {if(A == null || A.length == 0) {return;}//注意顺序是每扫描一个数,这个数往上移动;i从0开始;for(int i = 0; i < A.length; i++) { siftup(A, i);}}private void siftup(int[] A, int k) {while(k != 0) {int father = (k - 1)/2;if(A[father] > A[k]) {swap(A, father, k);}k = father;}}private void swap(int[] A, int i, int j) {int temp = A[i];A[i] = A[j];A[j] = temp;}
}

思路2,就是一半的array元素不动,倒数第二层总共会有n/2往下移动1层,+ 倒数第三层总共会有n/4的node往下移动2层,以此类推 到最高层 n/2^h,只有1个元素移动h层,最后计算出来是个o(n)的复杂度。也就是只用移动一半的node,往下移动就可以了,总共的步数是O(n)的数量级。https://www.youtube.com/watch?v=MiyLo8adrWw

public class Solution {/** @param A: Given an integer array* @return: nothing*/public void heapify(int[] A) {if(A == null || A.length == 0) {return;}for(int i = A.length / 2; i >= 0; i--) {siftDown(A, i);}}private void siftDown(int[] A, int k) {int smallest = k;while(k < A.length) {if(k*2 + 1 < A.length && A[k*2 + 1] < A[smallest]) {smallest = k*2 + 1;}if(k*2 + 2 < A.length && A[k*2 + 2] < A[smallest]){smallest = k*2 + 2;}if(k == smallest) {break;}swap(A, smallest, k);k = smallest;}}private void swap(int[] A, int i, int j) {int temp = A[i];A[i] = A[j];A[j] = temp;}
}

 

这篇关于Build Min Heap Using Array的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136349

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题

flutter开发实战-flutter build web微信无法识别二维码及小程序码问题 GitHub Pages是一个直接从GitHub存储库托管的静态站点服务,‌它允许用户通过简单的配置,‌将个人的代码项目转化为一个可以在线访问的网站。‌这里使用flutter build web来构建web发布到GitHub Pages。 最近通过flutter build web,通过发布到GitHu

【uva】11536-Smallest Sub-Array(区间移动问题)

一个区间移动的问题,1A了,感觉没什么好说的。。 13975926 11536 Smallest Sub-Array Accepted C++ 0.809 2014-08-01 11:00:20 #include<cstdio>#include<cstring>#include<iostream>using namespace std;#define INF 1 << 30

leetCode#448. Find All Numbers Disappeared in an Array

Description Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this

兔子-build.gradle中代码的含义

//声明构建的项目类型,这里当然是android了apply plugin: 'com.android.application'//设置编译android项目的参数android {// SDK的版本号,也就是API Level,例如API-19、API-20、API-21等等。compileSdkVersion 23//构建工具的版本,其中包括了打包工具aapt、dx等等。// 这个工具的目

做一个问卷考试,标准答案对比用户填写的答案,array_diff 进行差集比对

if( empty(array_diff($answer_mark, $answer)) && empty(array_diff( $answer,$answer_mark))){//用户答题正确}else{// 答题错误} 做一个问卷考试,标准答案对比用户填写的答案,array_diff  进行差集比对   如用户填写的答案变量为answer   标准答案为answer_mark

The `XXXUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build......

出现的警告: [!] The `ColorInHeartUITests [Debug]` target overrides the `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` build setting defined in `Pods/Target Support Files/Pods-ColorInHeart-ColorInHeartUITests/Po