首页 > 编程语言 >【算法训练】Hash的应用

【算法训练】Hash的应用

时间:2023-02-06 17:05:28浏览次数:35  
标签:输出 Hash 数字 训练 int 算法 OFFSET 500000


Hash的应用当数据较为庞大,但是数据的数量是有限范围内的,各不相同的。

例题
题目描述

给你n个整数,请按从大到小的顺序输出其中前m大的数。

输入

每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000)
第二行包含n 个各不相同,且都处于区间[-500000,500000]的整数。

输出

对每组测试数据按从大到小的顺序输出前m大的数样例输入
5 3
3 -35 92 213 -644

样例输出

213 92 3

#include<stdio.h>
#define OFFSET 500000 //偏移量,用于补偿实际数字与数组下标之间的偏移
int Hash[1000001];//hash数组,记录每个数字是否出现,不出现为0,出现后标记为1
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=-500000;i<=500000;i++){
Hash[i+OFFSET]=0;
}//初始化,将所有数字都标注为未出现
for(int i=1;i<=n;i++){
int x;
scanf("%d",&x);
Hash[x+OFFSET]=1;//凡是出现过的数字,改数组元素被标记为1
}
for(int i=500000;i>=-500000;i--){
if(Hash[i+OFFSET]==1){//判断该数字是否输入
printf("%d",i);//输出该数字
m--;//输出一个数字,m减一
if(m!=0){
printf(" ");
} else{
printf("\n");
break;//当前m个数字都已经输出完成,则跳出遍历循环
}
}
}
}

return 0;
}

该例题面限定了输入的数字一定是[-500000,500000]区间里 的整数,且各不相同。若利用一个数组分别统计每一种数字是否出现,其空间复 杂度依旧在题目的限定范围内。且统计出现数字当中较大的 m 个数字,也仅需 要从尾至头遍历这个数组,其时间复杂度仍在百万数量级.


标签:输出,Hash,数字,训练,int,算法,OFFSET,500000
From: https://blog.51cto.com/u_15955908/6039817

相关文章

  • 欧几里得算法及其扩展
    欧几里得算法及其扩展前言整除:对于整数\(a(a\ne0)\)和\(b\),如果\(\existsq\inZ\),使得\(b=a\timesq\),则称\(a\)能整除\(b\),记作\(a\midb\)。否则,称\(a\)......
  • 一文详解TensorFlow模型迁移及模型训练实操步骤
    摘要:本文介绍将TensorFlow网络模型迁移到昇腾AI平台,并执行训练的全流程。然后以TensorFlow1.15训练脚本为例,详细介绍了自动迁移、手工迁移以及模型训练的操作步骤。本文分......
  • 查找算法之斐波那契查找
    由来:斐波那契数列:前两项之和等于第三项,假如下标为k,那么f[k]=f[k-1]+f[k-2]。如果将一条长为f[k]的线段分为两条线段,它们的长度分别为f[k-1]和f[k-2],这种分法很接近黄......
  • 《区块链基础知识25讲》-第十讲-哈希算法
    无论输入数据的大小及类型如何,均可以将输入数据转换成固定长度的输出加密哈希算法拥有的特征能为任意类型的数据快速创建哈希值确定性:相同输入必定产生相同哈希值,换句话说,......
  • 代码随想录算法训练营第十八天|LeetCode 513.找树左下角的值、112. 路径总和 、113.路
    513.找树左下角的值文章:代码随想录(programmercarl.com)视频:怎么找二叉树的左下角?递归中又带回溯了,怎么办?|LeetCode:513.找二叉树左下角的值_哔哩哔哩_bilibili思路(......
  • 一文详解TensorFlow模型迁移及模型训练实操步骤
    摘要:本文介绍将TensorFlow网络模型迁移到昇腾AI平台,并执行训练的全流程。然后以TensorFlow1.15训练脚本为例,详细介绍了自动迁移、手工迁移以及模型训练的操作步骤。本文......
  • 机器学习中入门级必学的算法有哪些?
    文章目录​​一、K-近邻算法​​​​二、线性回归​​​​三、逻辑回归​​​​四、决策树算法​​​​五、集成算法​​​​六、聚类算法​​一、K-近邻算法什么是k-近邻算......
  • Acwing - 算法基础课 - 笔记(数学知识 · 四)(补)
    数学知识(四)这一小节讲的是容斥原理和简单博弈论。容斥原理定义最基本的,假设有3个两两相交的圆。那么三个圆所覆盖的面积大小为如果是2个圆的话,那么其所覆盖的面积为如果是4......
  • 机器学习-白板推导-系列(十)笔记:EM算法
    文章目录0笔记说明1算法收敛性证明2公式导出2.1ELBO+KLDivergence2.2ELBO+JensenInequlity2.3最后的工作3从狭义EM到广义EM4广义EM5总结0笔记说明我书面整理,根......
  • 算法导论-上课笔记10:最小生成树
    文章目录​​0前言​​​​1最小生成树​​​​2Kruskal算法​​​​3Prim算法​​0前言在电路设计中,常常需要将多个组件的针脚连接在一起。要连接n个针脚,可以使用n-1......