首页 > 其他分享 >各种数据结构以及七七八八的东西

各种数据结构以及七七八八的东西

时间:2024-09-17 22:26:15浏览次数:1  
标签:int 东西 void 新值 七七八八 插入 inline 数据结构 最值

堆(一般指二叉堆),实质就是一颗完全二叉树,用来维护单调性

堆可以实现插入新值,得到最值(直接取堆顶值),删除最值。

插入新值,从堆尾插入,不断比较 上浮;删除最值,就是将堆顶替换掉,可以用堆尾 替换,并不断比较 下沉,用树的深度的时间花销维护堆的单调性

感受一下维护堆的过程,可以用数组实现(一一对应),手写堆就很容易写

手写堆 code
inline void up(int u)
{
	if (u / 2 && a[u / 2] > a[u]) 
		swap(a[u], a[u / 2]), up(u / 2);
}

inline void down(int u)
{
	int v = u;
	if (u * 2 <= cnt && a[u * 2] < a[u]) 
		v = u * 2;
	if (u * 2 + 1 <= cnt && a[u * 2 + 1] < a[v]) 
		v = u * 2 + 1;
	if (v != u) 
		swap(a[u], a[v]), down(v);
}

inline void push(int x)
{
	a[++ cnt] = x;
	up(cnt);
}

inline void pop()
{
	a[1] = a[cnt]; 
	cnt --;
	down(1);
}

priority_queue 就是 STL 里的堆(默认大根堆)

另外,由于这个用堆尾替换堆顶的等价操作(等价于删除堆顶操作),两个相等的元素可能位置会有变化,即后进堆的可能深度更浅一些,所以,堆排序是不稳定的

标签:int,东西,void,新值,七七八八,插入,inline,数据结构,最值
From: https://www.cnblogs.com/wenzieee/p/18417646

相关文章

  • 数据结构(二叉树)练习题————考前必备合集
    今天在力扣和牛客网上找了一下题,下面附上题目链接,大家先做题再看答案1.检查两颗树是否相同。100.相同的树-力扣(LeetCode)2.另一颗树的子树。572.另一棵树的子树-力扣(LeetCode)3.翻转二叉树。226.翻转二叉树-力扣(LeetCode)4.判断一颗二叉树是否是平衡二叉树。110.......
  • 算法与数据结构——哈希优化策略与算法选择
    哈希优化策略在算法题中,我们通常通过线性查找替换为哈希查找来降低算法的时间复杂度。我们借助一个算法题来加深理解。Question给定一个整数数组nums和一个目标元素target,请在数组中搜索“和”为target的两个元素,并返回他们的数组索引。返回任意一个即可。线性查找:以时间换......
  • 【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379
    1.力扣965:单值二叉树1.1题目:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。示例1:输入:[1,1,1,1,1,null,1]输出:true示例2:输入:[2,2,2,5,2]输出:false提示:给定树的节点数范围是 [1,......
  • 【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623
    1.力扣1022:从根到叶的二进制之和1.1题目:给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。例如,如果路径为 0->1->1->0->1,那么它表示二进制数 01101,也就是 13 。对树上的每一片叶子,我们都要找出......
  • 计组那些容易搞混的东西
    访存机器字长=机器位数:是CPU一次处理的位数(64位机器,机器字长为64位,1字=64位=8字节)存储字长=数据总线根数(MDR):一次访存取出一个存储字长的数据,所以可能需要多次访存才能进行一次操作(主存为64K×16位,存储字长为16位,2字节)存储字长不等于机器字长,但有些题并未分别清......
  • 【数据结构】线性表作业——归并排序
    【问题描述】有一个含n(n<=200000)个整数的无序序列,采用链表的二路归并排序实现递增排序【输入形式】一行字符串,包含多个整数,每个数之间用空格分开。【输出形式】递增排序的结果,每个数之间用空格分开。【样例输入】947625813【样例输出】12345......
  • 数据结构(九)——队列(Queue)(上)
    一、概念队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstInFirstOut)入队列:进行插入操作的一端称为队尾(Tail/Rear)出队列:进行删除操作的一端称为队头(Head/Front)二、队列的使用在Java中,Queue是个接口,底层是通过链表......
  • 【数据结构】堆
    二叉树的顺序结构普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是......
  • 数据结构-树和二叉树
      树和二叉树 1.树的概念   树tree     是n(n>=0)个节点的有限集    在任意的一个非空树中       (1)有且仅有一个特定的被称为根(root)的节点       (2)当n>1时,其余的节点可分为m(m>0)个互不相交的有限......
  • C#数据结构与算法实战入门指南
    前言在编程领域,数据结构与算法是构建高效、可靠和可扩展软件系统的基石。它们对于提升程序性能、优化资源利用以及解决复杂问题具有至关重要的作用。今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望可以帮助到有需要的小伙伴。C#经典十大排序算法主要讲解C#经典......