【九度】题目1431:Sort

来源:互联网 发布:java bigdecimal 相加 编辑:程序博客网 时间:2024/05/22 06:11

时间限制:1 秒

内存限制:128 兆

特殊判题:

提交:8545

解决:2787

题目描述:

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

输入:

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

输出:

对每组测试数据按从大到小的顺序输出前m大的数。

样例输入:
5 33 -35 92 213 -644
样例输出:
213 92 3

#include "stdafx.h"#define OFFSET 500000int buf[1000000];int _tmain(){int n,m;for (int i = -500000; i <=500000; i++){buf[i+OFFSET]=0;}while (scanf("%d%d",&n,&m)){for (int i = 0; i < n; i++){   int x;scanf("%d",&x );buf[x+OFFSET]=1;}for (int i = 500000; i >=-500000; i--){if(buf[i+OFFSET]==1){printf("%d",i);m--;if (m==0){ break;}else printf(" ");}}}return 0;}
如果按之前的sort排序,然后在输出,复杂度为nlogn,千万级别。利用哈希数组,可以将数值与数组下标联系起来,算法的时间复杂度只需要便利一次这个数组,时间复杂度在百万的级别。
0 0