LeetCode[347] 前 K 个高频元素
https://leetcode.cn/problems/top-k-frequent-elements/description/
主要是用hash表
数据个数给定了,但是数据范围没有给定,可能是负数。
所以需要map来记录每个数的id
class Solution {
public:
map<int, int> id;
unordered_map<int, int> nid;
int st[100010];
int n = 1;
pair<int, int> cnt[100010];
vector<int> topKFrequent(vector<int> &nums, int k)
{
vector<int> ans;
for (auto x : nums)
{
if (!id[x])
{
id[x] = n;
nid[n] = x;
n++;
}
cnt[id[x]].first++;
cnt[id[x]].second = id[x];
}
sort(cnt + 1, cnt + n + 1);
for (int i = n, j = 1; j <= k; i--, j ++) {
ans.push_back(nid[cnt[i].second]);
}
return ans;
}
};