[手撕数据结构]——堆总结

堆实现:

二叉树 - 我使用数组模拟实现的二叉树

大顶堆和小顶堆,小顶堆就是每一个父节点都比他的子节点的值大,故,根节点最大嘛

比较重要的公式:

计算父节点:(n - 1) / 2

计算子节点:左节点n * 2 + 1,右节点n * 2 + 2

面试必考方法:

初始堆的建立

java 复制代码
private void heapify(){
    // 遍历所有的非叶子节点
    for(int i = size / 2 - 1; i >= 0; i--){
        // 下潜
        down(i);
    }

}

上浮

java 复制代码
private void up(int offered){
    int child = size;
    // parent与offered作比较
    while(child > 0){
        int parent = (child - 1) / 2;
        if(offered > arr[parent]){
            arr[child] = arr[parent];
            child = parent;
        }else{
            break;
        }
    }
    arr[child] = offered;
}

下潜

java 复制代码
private void down(int p){
    int left = p * 2 + 1;
    int right = left + 1;
    int max = p;
    if(max < size && arr[left] > arr[max]){
        max = left;
    }
    if(max < size && arr[right] > arr[max]){
        max = right;
    }
    if(p != max){
        swap(p, max); // 交换两个节点
        down(max); // 递归调用
    }
}

应用场景

我就直接上力扣了:

  1. 合并K的有序数组
  2. 求数组第K大元素
  3. 求数据流第K大元素
  4. 求数据流中位数
相关推荐
2301_764441336 小时前
LISA时空跃迁分析,地理时空分析
数据结构·python·算法
玉树临风ives7 小时前
atcoder ABC 452 题解
数据结构·算法
无敌昊哥战神9 小时前
深入理解 C 语言:巧妙利用“0地址”手写 offsetof 宏与内存对齐机制
c语言·数据结构·算法
XH华10 小时前
数据结构第九章:树的学习(下)
数据结构·学习
会编程的土豆11 小时前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
汀、人工智能13 小时前
[特殊字符] 第93课:太平洋大西洋水流问题
数据结构·算法·数据库架构·图论·bfs·太平洋大西洋水流问题
feng_you_ying_li14 小时前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
锅挤15 小时前
数据结构复习(第一章):绪论
数据结构·算法
汀、人工智能15 小时前
[特殊字符] 第95课:冗余连接
数据结构·算法·链表·数据库架构··冗余连接