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

堆实现:

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

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

比较重要的公式:

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

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

面试必考方法:

初始堆的建立

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

}

上浮

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;
}

下潜

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. 求数据流中位数

相关推荐

  1. [数据结构]——总结

    2024-03-31 06:04:06       20 阅读
  2. 大厂面试sql题目总结

    2024-03-31 06:04:06       11 阅读
  3. 数据结构-

    2024-03-31 06:04:06       43 阅读
  4. 数据结构--排序

    2024-03-31 06:04:06       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 06:04:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 06:04:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 06:04:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 06:04:06       20 阅读

热门阅读

  1. JVM八股

    JVM八股

    2024-03-31 06:04:06      18 阅读
  2. vue路由使用

    2024-03-31 06:04:06       21 阅读
  3. 小米汽车:驶向未来的科技新星

    2024-03-31 06:04:06       21 阅读
  4. 专升本-机器人流程化自动化(RPA)

    2024-03-31 06:04:06       20 阅读
  5. Kafka开机自启脚本

    2024-03-31 06:04:06       19 阅读
  6. vector和array区别

    2024-03-31 06:04:06       20 阅读
  7. IPv6 Scapy Samples

    2024-03-31 06:04:06       15 阅读
  8. 2024-03-30 问AI: 介绍一下深度学习里面的 DCNN模型

    2024-03-31 06:04:06       17 阅读