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

相关文章

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

优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策略

当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如 temperature 和 top_p 等参数进行精确控制。但是你是否曾深入思考过temperature和top_p参数的具体作用? 本文将详细解析并可视化定义LLM输出行为的

6-通过Java代码build cube

转:http://www.cnblogs.com/hark0623/p/5580632.html 通常是用于增量 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3

[LeetCode] 238. Product of Array Except Self

题:https://leetcode.com/problems/product-of-array-except-self/description/ 题目 Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all