HDU 1425 sort 重温
Description
n个不同整数,从大到小输出前m个
数字多达百万,sort定然超时
我们在数轴上将输入的n个数字标记,从后向前遍历输出即可
这样省去了sort的时间,只要遍历的时间
Code
#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
//int main()
//{
// int n, m, tem;
// while(~scanf("%d%d", &n, &m))
// {
// map<int, bool> mp;
// for(int i = 0; i < n; ++i)
// {
// scanf("%d", &tem);
// mp[tem] = 1;
// }
// int cnt = 0;
// for(int i = 500000; i >= -500000 && cnt < m; --i)
// if(mp[i])
// {
// cout << i << ' ';
// cnt++;
// }
// cout << '\n';
// }
// return 0;
//}
bool has[1000009];
int main()
{
int n, m, tem;
while(~scanf("%d%d", &n, &m))
{
memset(has, 0, sizeof(has));
for(int i = 0; i < n; ++i)
{
scanf("%d", &tem);
has[tem + 500000] = 1;
}
int cnt = 0;
for(int i = 1000000; i >= 0 && cnt < m; --i)
if(has[i])
{
printf("%d%c", i - 500000,cnt == m - 1 ? '\n' : ' ');
cnt++;
}
}
return 0;
}
如上,我试过map,他不用坐标偏移,但更为耗时,毕竟使用哈希目的在于节约时间,所以哈希不要用map