由数据范围反推算法复杂度以及算法内容 - AcWing

常用代码模板2——数据结构 - AcWing

基本思想:

如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<=K2i+2 ,则称为小堆(或大堆)

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆

而且堆的性质满足:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;
  • 堆总是一棵完全二叉树。

借鉴小根堆大根堆以及对顶堆的示意图,对顶堆是下面为大根堆,上面为小根堆,元素向上递增,这样我们就可以用O(1)的时间复杂度维护中位数

这里y总讲的是我们用数组来手写一个堆,较大的元素下沉,较小的元素上升,不断维护堆里元素保证堆顶为最小的元素即可。

stl容器里分别是大根堆 priority_queue <int,vector<int>,less<int> >q;

小根堆 priority_queue <int,vector<int>,greater<int> > q;

838. 堆排序 - AcWing题库

输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。

输入格式

第一行包含整数 n 和 m。

第二行包含 n 个整数,表示整数数列。

输出格式

共一行,包含 m 个整数,表示整数数列中前 m 小的数。

数据范围

1≤m≤n≤1e5
1≤数列中元素≤1e9

输入样例:

5 3
4 5 1 3 2

输出样例:

1 2 3
#include<iostream>
#include<algorithm>using namespace std;const int N = 100010;
int n, m;
int h[N], size1;void down(int u)
{int t = u; //用t存左右儿子是否有小于该节点的if(u * 2 <= size1 && h[u * 2] < h[t]) t = u * 2; //左儿子存在且小于该节点if(u * 2 + 1 <= size1 && h[u * 2 + 1] < h[t]) t = u * 2 + 1; //右儿子存在且小于该节点if(t != u) //不等说明存在儿子比该节点小 就要进行交换并继续递归{swap(h[u], h[t]);down(t);}
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++) cin >> h[i];size1 = n;for(int i = n / 2; i; i--) down(i); //完全二叉树的最后一层叶节点有n/2个,所以我们只用down除叶节点以外的n/2个节点//将建堆的复杂度降低到O(n)while(m--){cout << h[1] << " ";h[1] = h[size1];size1--;down(1);}return 0;
}

例题:

839. 模拟堆 - AcWing题库

347. 前 K 个高频元素 - 力扣(LeetCode)

373. 查找和最小的 K 对数字 - 力扣(LeetCode)

480. 滑动窗口中位数 - 力扣(LeetCode)//对顶堆 动态维护中位数

【数据结构2-1】二叉堆与 ST 表 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

acwing基础课——堆相关推荐

  1. acwing基础课——Dijkstra

    由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3--搜索与图论 - AcWing 基本思想: 迪杰斯特拉(dijkstra)算法是单源最短路径问题的求解方法,它是一个按路径长度递 ...

  2. acwing基础课——spfa

    由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3--搜索与图论 - AcWing 基本思想: 一般单源最短路我们都可以用spfa算法来做,如果过不了再尝试其他算法. spfa算法 ...

  3. acwing基础课——哈希表

    由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板2--数据结构 - AcWing 基本思想: 哈希表:也叫做散列表.是根据关键字和值(Key-Value)直接进行访问的数据结构.也 ...

  4. PAT甲级1155 Heap Paths (30 分):[C++题解]堆、堆的遍历、树的遍历、dfs输出路径、完全二叉树建树

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 堆首先是完全二叉树,所以先建完全二叉树,由于给定的是层序遍历的数据,所以直接用数组即可,注意数组下标从1开始,这样便满足结点u和左儿 ...

  5. 校招进大厂的Tips

    校招进大厂的Tips 面经地址 实干型 985大佬实习面经 211 春招实习之旅 非科班双非上岸阿里 暑期实习,许愿阿里 华科大佬终选字节 京东java实习 社招:dfs and bfs 双非本硕 纯 ...

  6. 蓝桥杯总结!绝对干货!!

    关于一个很菜很菜的菜鸡,菜到普通二本的校赛落选,如何,自费逆袭省一,再到国三 文章目录 个人情况 关于300到底值不值得冲 关于我如何备赛 第一坑:备赛刷LeetCode(寄) 数据结构课 语法基础 ...

  7. 数据结构模板题(必备)Day2

    单链表 实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数: 删除第 kk 个插入的数后面的数: 在第 kk 个插入的数后插入一个数. 现在要对该链表进行 MM 次操作,进行完所有操作后 ...

  8. Acwing LeetCode 题目分类——配套基础课进阶课

    LeetCode 题目分类--配套基础课进阶课 1.基础 二分(满足一个条件的最值问题) LeetCode33 https://leetcode.com/problems/search-in-rota ...

  9. 算法与数据结构模版(AcWing算法基础课笔记,持续更新中)

    AcWing算法基础课笔记 文章目录 AcWing算法基础课笔记 第一章 基础算法 1. 排序 快速排序: 归并排序: 2. 二分 整数二分 浮点数二分 3. 高精度 高精度加法 高精度减法 高精度乘 ...

最新文章

  1. 鏖战双十一-阿里直播平台面临的技术挑战
  2. 【腾讯面试题】Docker
  3. react native中一次错误排查 Error:Error: Duplicate resources
  4. abap 函数远程启用的模块参数_SAP AMDP介绍 - ABAP托管的HANA数据库过程
  5. ZigBee与智慧家居-ZigBee方案
  6. 实验楼 linux内核原理与分析,《Linux内核原理与分析》第一周作业 20189210
  7. HTML学习笔记4之第五章第六章
  8. 天画-codeMaker组件化架构升级实践
  9. 金色装饰素材,用这个技巧创造节日的感觉,完美
  10. 长连接与心跳包 Persistent connection and HearBeats
  11. 刘意JavaSE 学习笔记 Day19-Day21——异常,IO(File类/字符流/字节流)
  12. C语言不使用中间变量交换两个变量的数据
  13. python alpha_python 给图像添加透明度(alpha通道)
  14. 英语知识系列:英文与中文句子构成成分的对应关系
  15. Java之Stream的管道处理
  16. MYSQL如何制作资产负债表_资产负债表该如何制作呢?搞定资产负债表,仅需这5步!...
  17. 你所不知的X86 CPU微码机制
  18. SwiftUI嵌入Stack样式导航视图(NavigationView)中List显示怪异的解决
  19. 工业互联网企业蘑菇物联获数千万元A轮融资,元禾原点资本领投...
  20. CODESYS Automation Server Connector

热门文章

  1. Sublime Text 3 配置 PHP IDE环境 并使用Xdebug进行调试
  2. 国密算法SM2 密钥对的生成
  3. python和java哪个更有潜力-Python和JAVA的就业前景哪个好点?
  4. Math.atan和Math.atan2函数
  5. 四阶巴特沃兹低通滤波器的设计与仿真
  6. C#入门练习题(1-7例)
  7. FPGA SATA IP控制器的SATA接口调试记录
  8. 计算机教师信息化大赛作品,全国“xx杯”计算机专业类说课大赛优秀作品:信息化色彩搭配训练说课课件.ppt...
  9. rtsp有没有好使_求几个可用的稍微清晰点的RTSP播放源,最好是上海的!
  10. 【20180904】【查漏补缺】量纲分析法—Pi定理(Buckingham定理)