jobdu1431
来源:互联网 发布:伦敦高级应召女郎 知乎 编辑:程序博客网 时间:2024/06/18 09:06
九度题目1431:Sort
题目描述:
给你n个整数,请按从大到小的顺序输出其中前m大的数。
输入:
每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-500000,500000]的整数。
输出:
对每个测试用例,将获得给定分数的学生人数输出。
样例输入:
5 3
3 -35 92 213 -644
样例输出:
213 92 3
分析:
如果使用排序来解决问题,则在题目限定的时间内无法完成。即使采用高效的快速排序,时间复杂度仍然为O(nlogn),仍为千万级别的数量级,在1s的时间限制内无法完成对问题的求解。所以本例介绍了一种在输入数据有如上的特点时,利用Hash实现一种在时间上更加高效的排序方法。
代码:
#include<stdio.h>#define MAX 1000001#define OFFSET 500000int Hash[MAX];int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { //初始化Hash for(int i=0;i<MAX;i++) { Hash[i]=0; } //在Hash中标记数字 for(int j=0;j<n;j++) { int num; scanf("%d",&num); Hash[num+OFFSET]=1; } //遍历Hash,并按指定格式输出 for(int k=MAX-1;k>=0;k--) { if(Hash[k]==1) { printf("%d",k-OFFSET); m--; if(m!=0) { printf(" "); } else { printf("\n"); break; } } } } return 0;}
结果:
0 0
- jobdu1431
- 数据结构实验之串一:KMP简单应用
- oracle什么时候需要commit
- django python报错:SNIMissingWarning,InsecurePlatformWarning
- 3.最基础的vi编辑命令笔记:vi(alias vi='vim')命令
- linux命令(1)
- jobdu1431
- SQL基础
- NFS实践及自动挂载问题
- 备案期间网站是否能正常访问
- Android L SystemUI 流程简要分析
- 你怎样看待梁定郊的贿谢之行.
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- mongoDB学习笔记二
- HM编码器代码阅读(29)——码率控制