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

堆实现:

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

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

比较重要的公式:

计算父节点:(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. 求数据流中位数
相关推荐
Dfreedom.6 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
知花实央l8 小时前
【算法与数据结构】拓扑排序实战(栈+邻接表+环判断,附可运行代码)
数据结构·算法
吃着火锅x唱着歌8 小时前
LeetCode 410.分割数组的最大值
数据结构·算法·leetcode
AI科技星10 小时前
垂直原理:宇宙的沉默法则与万物运动的终极源头
android·服务器·数据结构·数据库·人工智能
QuantumLeap丶11 小时前
《数据结构:从0到1》-05-数组
数据结构·数学
violet-lz11 小时前
数据结构八大排序:希尔排序-原理解析+C语言实现+优化+面试题
数据结构·算法·排序算法
草莓工作室12 小时前
数据结构9:队列
c语言·数据结构·队列
violet-lz13 小时前
数据结构八大排序:堆排序-从二叉树到堆排序实现
数据结构·算法
爱学习的小鱼gogo13 小时前
python 单词搜索(回溯-矩阵-字符串-中等)含源码(二十)
开发语言·数据结构·python·矩阵·字符串·回溯·递归栈
浮灯Foden13 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试