题目:
输入的数值是[-50000,50000],要求按照从大到小输出前M大的数据,空间可以随意申请,但是需要1S内解决
sort太慢了,需要hash来解决
分析:
value | 数组下标 | 计算方法 |
-50000 | 0 | -50000 + 50000 |
-49999 | 1 | -49999 + 50000 |
0 | 50000 | 0 +50000 |
50000 | 100000 | 50000 + 50000 |
intput:
5 3 (数的个数,前M大)
3 -5 92 213 -644
output:
213 92 3
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <stack>
#define OFFSET 50000
using namespace std;
int main() {
int a[100001] = {0};
int n, m;
cin >> n >> m;
while(n--) {
int t;
cin >> t;
a[t + OFFSET] = 1;
}
int cnt = 0;
for(int i = 100000; i >= 0; i--) {
if(a[i] == 1) {
cout << i - OFFSET << " ";
cnt ++;
if(cnt == m) {
break;
}
}
}
}