堆的模板:使用一维数组实现小根堆,实现删除操作和堆顶元素输出功能

一、链接

838. 堆排序

二、题目

输入一个长度为 nn 的整数数列,从小到大输出 mm 小的数

输入格式

第一行包含整数 nn 和 mm。

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

输出格式

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

数据范围

1≤m≤n≤1051≤m≤n≤105,
1≤数列中元素≤1091≤数列中元素≤109

输入样例:

5 3
4 5 1 3 2

输出样例:

1 2 3

三、题意

其实使用排序函数就可以实现要求,但是这里是一个模板题目,主要是为了学习和练习一下模板,题目的意思是,输入一串数字,输出前m个最小的数字

四、代码

#include<iostream>
#include<algorithm>using namespace std;const int N=1e5+10;int n,m,cnt;
int h[N];void down (int u)
{int t=u;if(u*2<=cnt&&h[u*2]<h[t])    t=u*2;if(u*2+1<=cnt&&h[u*2+1]<h[t])    t=u*2+1;if(t!=u){swap(h[u],h[t]);down(t);}
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)   scanf("%d",&h[i]);cnt=n;for(int i=n/2;i;i--)    down(i);while(m--){printf("%d ",h[1]);h[1]=h[cnt--];down(1);}return 0;
}

五、总结

1.堆是一个二叉树形状,我们这里的模板是使用一个一维数组来模拟实现小根堆,满足的性质是父节点小于左右孩子结点的数值。一维数组假设父节点是n,左孩子结点是n*2,右孩子结点是n*2+1,数组下标从1开始使用

2.首先定义一个down函数,表示一个数往下沉,如果这个数字比较大的话

3.实现down函数:用一个临时变量t保存需要下沉的数组下标u,进行两个条件判断,第一个条件判断比较左孩子和当前节点的数值,把比较小的下标存到t里面;第二个条件判断比较右孩子和当前结点的数值(临时变量t的那个结点),把比较小的下标存到t里面,其实就是看左右孩子结点里面有没有比父节点数值小的,如果有,就把那个孩子节点的下标存到临时变量t里面。如果临时变量t和当前下标u不相等,就交换两个数组元素,然后递归处理临时变量t.在上述过程中需要保证孩子节点存在,使用这部分代码进行实现

u*2<=cnt;
u*2+1<=cnt;

 cnt表示数组总长度 

4.输入需要的所有数据

5.建立堆:从中间开始,把元素往下沉,随着递归的进行,最后会自动建好一个堆,感觉是记住就好

for(int i=n/2;i;i--)    down(i);

6.每一次把堆顶元素输出,把堆的最后一个元素移到堆顶,然后把堆顶元素往下沉,实现删除原堆顶元素,经过m次,就可以实现题目的要求

7.堆还是比较简单的,越来越有信心了(bushi

8.如果条件判断或者什么循环只需要写一句话,可以不用写大括号,直接空一个 tab ,然后写一个语句,可能会更加美观。

 

六、精美图片

 

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

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

相关文章

外国(境外)机构在中国境内提供金融信息服务许可8家名单

6月30日&#xff0c;国家互联网信息办公室公布8家外国&#xff08;境外&#xff09;机构在中国境内提供金融信息服务许可名单&#xff0c;如下&#xff1a;

SQL注入

举个例子 // 设定$name 中插入了我们不需要的SQL语句 $name "Qadir; DELETE FROM users;";mysqli_query($conn, "SELECT * FROM users WHERE name{$name}");那么语句就变成了&#xff1a; SELECT * FROM users WHERE nameQadir; DELETE FROM users;通常…

【云原生】使用kubeadm搭建K8S

目录 一、Kubeadm搭建K8S1.1环境准备1.2所有节点安装docker1.3所有节点安装kubeadm&#xff0c;kubelet和kubectl1.4部署K8S集群1.5所有节点部署网络插件flannel 二、部署 Dashboard 一、Kubeadm搭建K8S 1.1环境准备 服务器IP配置master&#xff08;2C/4G&#xff0c;cpu核心…

开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

大家好&#xff0c;我是独孤风。 开源元数据管理平台Datahub近期得到了飞速的发展。已经更新到了0.10.5的版本&#xff0c;来咨询我的小伙伴也越来越多&#xff0c;特别是安装过程有很多问题。本文经过和群里大伙伴的共同讨论&#xff0c;总结出安装部署Datahub最新版本的部署手…

【Vue】Parsing error: No Babel config file detected for ... vue

报错 Parsing error: No Babel config file detected for E:\Study\Vue网站\实现防篡改的水印\demo02\src\App.vue. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.             …

类的定义

一、定义类 类&#xff08;class&#xff09;是用户自定义数据类型。如果程序中要使用类类型&#xff0c;必须根据实际需要定义&#xff0c;或者使用已设计好的类。 class 类名 {成员列表 }; 类可以没有成员&#xff0c;也可以有多个成员。类成员可以是数据或者函数。所有成…

Go strings.Title方法被废弃(Deprecated)

strings.Title的使用 在传统中&#xff0c;我们可以通过如下形式将每个单词的首字母变成大写字母&#xff0c;示例如下&#xff1a; func TestTitle(t *testing.T) { fmt.Println(strings.Title("hello world")) fmt.Println(strings.Title("hell golang&qu…

fishing之第三篇邮件服务器搭建

文章目录 EwoMail 邮件服务器搭建一、前期准备二、安装EwoMail三、添加解析四、ewomail的后台管理系统五、WebMail(web邮件系统)六、收发邮件测试免责声明EwoMail 邮件服务器搭建 一、前期准备 1、云服务-CentOS服务器 2、购买域名 CentOS服务器43.x.x.x.域名abcxxx.xxx.c…

Vue day01

Vue 1.简介&#xff1a; ​ Vue是一套用于构建用户界面的渐进式框架。与其他大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层&#xff0c;不仅容易上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工…

MySQL — 存储引擎

文章目录 存储引擎存储引擎类型InnoDBMyISAMMEMORY 存储引擎是数据库的核心&#xff0c;对于mysql来说&#xff0c;存储引擎是以插件的形式运行的。虽然mysql支持种类繁多的存储引擎&#xff0c;但是常用的就那么几种。这篇文章主要是对其进行简单的介绍。 存储引擎 MySQL可插…

20天学会rust(一)和rust say hi

关注我&#xff0c;学习Rust不迷路 工欲善其事&#xff0c;必先利其器。第一节我们先来配置rust需要的环境和安装趁手的工具&#xff0c;然后写一个简单的小程序。 安装 Rust环境 Rust 官方有提供一个叫做 rustup 的工具&#xff0c;专门用于 rust 版本的管理&#xff0c;网…

JSON转换:实体类和JSONObject互转,List和JSONArray互转(fastjson版)

//1.java对象转化成String String sJSONObject.toJSONString(javaObject.class); //2. java对象转化成Object Object strJSONObject.toJSON(javaObject.class); //3.String类型转json对象 JSONObject jsonObject JSONObject.parseObject(str); //4. String…

window远程连接Linux

Linux启用ssh服务 管理员权限进入root 安装 OpenSSH 服务器软件包 对于 Debian、Ubuntu 或基于这些发行版的系统&#xff0c;可以运行以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server对于基于 Red Hat、CentOS 或 Fedora 的系统&#xff0c;可以…

xcode 的app工程与ffmpeg 4.4版本的静态库联调,ffmpeg内下的断点无法暂停。

先阐述一下我的业务场景&#xff0c;我有一个iOS的app sdk项目&#xff0c;下面简称 A &#xff0c;以及运行 A 的 app 项目&#xff0c;简称 A demo 。 引用关系为 A demo 引用了 A &#xff0c;而 A 引用了 ffmpeg 的静态库&#xff08;.a文件&#xff09;。此时业务出现了 b…

jmeter中json提取器,获取多个值,并通过beanshell组成数组

jmeter中json提取器介绍 特别说明&#xff1a;**Compute concatenation var(suffix_ALL)&#x1f617;*如果找到许多结果&#xff0c;则插件将使用’ &#xff0c; 分隔符将它们连接起来&#xff0c;并将其存储在名为 _ALL的var中 json提取器调试 在查看结果树中选择JSON Pat…

2023,谁在引领实时互动进入高清时代?

实践是检验真理的唯一标准&#xff0c;技术是行业进步的核心动能。在实时互动的新时代里&#xff0c;不断进化的声网已然完成自证。 作者|斗斗 出品|产业家 “一个医疗行业的客户&#xff0c;曾向我们提出一个需求&#xff0c;希望在120急救场景下&#xff0c;可以远程看清…

docker search 镜像报错: connect: no route to host (桥接模式配置静态IP)

如下 原因 可能有多种&#xff1a; ① 没有开放防火墙端口 ② ip地址配置有误 解决 我是因为虚拟机采用了桥接模式&#xff0c;配置静态ip地址有问题。 先确认虚拟机采用的是 桥接模式&#xff0c;然后启动虚拟机。 1、打开命令行&#xff0c;输入下面指令&#xff0c;打开…

修改node_modules里的源码

最近在工作中使用到一款生成二维码的依赖&#xff08;以vue项目为例讲解&#xff09;&#xff1a;vue-qr&#xff0c;安装的4.0.9版本的&#xff0c;在启动工程的时候报错&#xff1a; You may need an appropriate loader to handle this file type后我查阅各种资料发现 1&a…

Spring中Bean的线程安全问题

Spring框架本身没有明确指出Bean的线程安全问题&#xff0c;所以Bean本身也不具备线程安全的特性&#xff0c;具体情况得看scope的情况。 1.原型的(prototype) 每次创建一个新的对象&#xff0c;每个线程使用的对象都是要新创建的&#xff0c;所以不会存在线程安全的问题。 2…

[论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集

一、FT数据集 & Reward model数据集 Deepspeed-chat 源代码的数据集: Dahoas/rm-static: 这是一个用于强化学习的静态环境数据集,包含了一个机器人在一个固定环境中的运动轨迹。该数据集旨在用于评估强化学习算法在静态环境下的表现。 Dahoas/full-hh-rlhf: 这是一个用于…