堆专题3 删除堆顶元素

news2024/11/20 19:44:29

题目:

样例:

输入
6
3 2 6 5 8 7

输出
7 5 6 3 2

思路:

        堆顶的删除,就是取 或者 覆盖掉 h[1],其中覆盖掉 h[1] 的操作,用向下调整操作堆即可,向下调整的过程相对简单,只需要将堆尾元素移动到堆顶,然后逐级与其较小(或较大)的子节点进行比较并交换位置。这个过程的时间复杂度是O(log n),其中n是堆中元素的数量。

即 h[1] = h[n--],downAdjust(1,n);

代码详解如下:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#define endl '\n'
#define YES puts("YES")
#define NO puts("NO")
#define umap unordered_map
#define All(x) x.begin(),x.end()
#pragma GCC optimize(3,"Ofast","inline")
#define IOS std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 2e6 + 10;

umap<int,int>heap;	// 建立堆数组
int n;

// 向下调整
inline void downAdjust(int low,int high)
{
	int i = low,j = i << 1;
	
	while(j <= high)
	{
		// 如果存在右孩子,并且右孩子 更符合 堆顶 性质,那么调整 右孩子
		if(j + 1 <= high && heap[j + 1] > heap[j]) ++j;
		
		// 堆调整
		if(heap[j] > heap[i])
		{
			swap(heap[j] , heap[i]);
			i = j;
			j = i << 1;
		}else break;
	}
}

inline void DeleteTop()
{
	heap[1] = heap[n--]; // 将尾堆 覆盖堆顶
	
	downAdjust(1,n);	// 向下调整堆
}

inline void solve()
{

	cin >> n;
	
	// 插入堆
	for(int i = 1,x;i <= n;++i) cin >> heap[i];
	
	// 根据题意,向下调整堆
	for(int i = n / 2;i;--i) downAdjust(i,n);
	
	// 删除堆顶元素
	DeleteTop();
	
	// 输出堆
	for(int i = 1;i <= n;++i)
	{
		if(i > 1) cout << ' ';
		cout << heap[i];
	}
}

int main()
{
//	freopen("a.txt", "r", stdin);
	IOS;
	int _t = 1;
//	cin >> _t;
	while (_t--)
	{
		solve();
	}

	return 0;
}

最后提交:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高团队协作效率?看完这篇就懂了(附工具)

在竞争激烈的现代工作环境中&#xff0c;团队协作被认为是成功的关键之一。团队协作能够提高效率&#xff0c;增强创造力&#xff0c;并帮助团队成员达成共同目标。无论是在大公司还是小企业中&#xff0c;团队协作都是不可或缺的。在这篇文章中&#xff0c;我们将分享如何通过…

提高测试用例覆盖全面性 5大技巧

测试用例覆盖率越高&#xff0c;有助于尽早发现潜在的问题和Bug&#xff0c;从而保障了软件的质量和稳定性。而测试用例覆盖率可以帮助测试团队评估测试的全面性&#xff0c;发现测试用例的盲点和不足之处&#xff0c;从而提高测试的效率&#xff0c;帮助测试团队优化测试资源的…

OpenCV4(C++)—— 图像连通域的详细分析

文章目录 前言一、connectedComponents函数二、connectedComponentsWithStats函数 前言 图像连通域&#xff0c;其实就是图像分割的一种方法。它通过检测像素之间的连接关系和相似性来划分图像中的区域&#xff0c;以便进行后续处理。图像邻域和图像邻域分析就不介绍了&#x…

Redis第四五六章 持久化事务主从复制

Redis ⽀持 RDB 和 AOF 两种持久化机制&#xff0c;持久化功能有效地避免因进程退出造成数据丢失问题&#xff0c; 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。 目录 第四章 持久化 4.1 RDB 4.1.1 触发机制 4.1.2 流程说明 4.1.3 RDB ⽂件的处理 4.1.4 RDB 的优…

Autoform R11 R10 R8共存绿色免安装版(解压即用)

使用说明&#xff1a; 如杀毒软件报毒&#xff0c;请关闭。 保证路径正确D:\Autoform 1.首次使用&#xff0c;请点击“首次运行使用.vbs” &#xff08;以后就不用点了&#xff09; 2.打开R8~R11快捷方式即可使用 3.如果提示证书报错&#xff0c; 就重启电脑后就可以了&#…

信必优收到全国性综合类证券客户表扬信

近日&#xff0c;信必优收到全国性综合类证券客户表扬信&#xff0c;客户高度表扬我司驻场员工认真负责的态度和专业扎实的技术能力&#xff0c;任务承担快&#xff0c;工作效率高&#xff0c;对项目顺利开展做出了积极贡献。 客户成立于1988年&#xff0c;在全国21个省级区域…

mars3d使用自己的字体库添加对应的图标

需要引入对应的文件 引入对应的图标文件 使用 效果

【算法-动态规划】两个字符串的删除操作-力扣 583

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【超分】A Benchmark for Chinese-English Scene Text Image Super-resolution

中英文场景文本图像超分辨率的基准 摘要&#xff1a;场景文本图像超分&#xff08;STISR&#xff0c;Scene Text Image Super-resolution&#xff09;就是将低分辨率图像恢复为具有令人愉快的视觉和可读的文本内容。现有工作都是处理笔画简单的英文字符而不是复杂的中文字符。…

Axure RP医疗在线挂号问诊原型图医院APP原形模板

医疗在线挂号问诊Axure RP原型图医院APP原形模板&#xff0c;是一款原创的医疗类APP&#xff0c;设计尺寸采用iPhone13&#xff08;375*812px&#xff09;&#xff0c;原型图上加入了仿真手机壳&#xff0c;使得预览效果更加逼真。 本套原型图主要功能有医疗常识科普、医院挂号…

【JavaEE初阶】 volatile关键字 与 wait()方法和notify()方法详解

文章目录 &#x1f332;volatile 关键字&#x1f6a9;volatile能保证内存可见性&#x1f6a9;volatile 不保证原子性 &#x1f38b;wait 和 notify&#x1f6a9;wait()方法&#x1f6a9;notify()方法&#x1f6a9;notifyAll()方法&#x1f6a9;理解notify 和 notifyAll &#x…

商贸进销存软件怎么选?

本文将为大家讲解&#xff1a;1、商贸企业进销存流程上的难点&#xff1b;2、商贸企业如何选择进销存系统&#xff1f; 在当今快速发展的商业环境中&#xff0c;有效的进销存&#xff08;Inventory Management&#xff09;管理是商贸企业成功的关键因素之一。然而&#xff0c;…

linux环境下使用lighthouse与selenium

一、安装谷歌浏览器、谷歌浏览器驱动、lighthouse shell脚本 apt update && apt -y upgrade apt install -y curl curl -fsSL https://deb.nodesource.com/setup_18.x | bash apt install -y nodejs apt install -y npm npm install -g lighthouse apt-get install -y …

AutoRunner自动化测试工具

AutoRunner自动化测试工具(简称AR&#xff09;是泽众软件自主研发的自动化测试工具&#xff0c;也是一个自动测试框架&#xff0c;加载不同的测试组件&#xff0c;能够实现面向不同应用的测试。通过录制和编写测试脚本&#xff0c;实现功能测试、回归测试的自动化&#xff0c;自…

UE4中无法保存项目问题

系列文章目录 文章目录 系列文章目录前言一、解决方法 前言 取消&#xff1a;停止保存所有资产并返回编辑器。 重试&#xff1a;尝试再次保存资产。 继续&#xff1a;仅跳过保存该资产。 当我点击继续时&#xff0c;关闭项目&#xff0c;然后重新打开项目&#xff0c;发现之前…

代码随想录

前言 代码随想录算法训练营day04 (不会写数据结构的代码&#xff0c;对着力扣题解和代码随想录网站边敲学) 一、Leetcode24. 两两交换链表中的节点 1.题目 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值…

手部关键点检测1:手部关键点(手部姿势估计)数据集(含下载链接)

手部关键点检测1&#xff1a;手部关键点(手部姿势估计)数据集(含下载链接) 目录 手部关键点检测1&#xff1a;手部关键点(手部姿势估计)数据集(含下载链接) 1. 前言 2. 手部检测数据集&#xff1a; &#xff08;1&#xff09;Hand-voc1 &#xff08;2&#xff09;Hand-vo…

FMI标准:实现SkyEye与Simulink无需缝合的联合仿真

在汽车工业、航空、机电装备等领域存在着不同的应用、建模系统。在解决不同问题的过程中&#xff0c;为了仿真完整的系统&#xff0c;往往需要在不同的仿真程序之间进行交互&#xff0c;并且为了实现完整的调试&#xff0c;系统的集成必须确保来自不同供应商的仿真环境能够协同…

腾讯云 CODING 界面全新升级,代码仓库 Rebase 变基合并、批量复制事项等功能上线!

点击链接了解详情 金秋十月&#xff0c;腾讯云 CODING DevOps 焕新上线&#xff01;本次更新&#xff0c;我们不仅推出了全新的用户界面&#xff0c;还推出了一系列重磅产品能力&#xff0c;满足广大用户的日常研发与协作所需。 以下是 CODING 新功能速递&#xff0c;快来看看是…

文件的操作

前言&#xff1a;哈喽小伙伴们好久不见&#xff0c;国庆假期已经结束&#xff0c;接下来我们还是要马不停蹄的投入到学习当中&#xff0c;只有尽快调整状态回归学习&#xff0c;才能弯道超车。 今天我们一起来学习C语言——文件操作。 本篇文章讲到的所有函数均需要头文件#inc…