LeetCode HOT100 - 前 K 个高频元素
找出现频率前 k 高的元素
首先显然要去统计每个元素的出现次数
有了出现次数后,相当于每个元素它的权值
这样我们是要找数组中 k 个最大的元素
因为不能直接排序,所以要么使用堆,要么直接桶存储相关的信息
class Solution {
public:
vector<int> topKFrequent(vector<int>& a, int k) {
int n = a.size();
unordered_map<int, int> cnt;
int mx = 0;
for (int i = 0; i < n; i++) {
cnt[a[i]]++;
mx = max(mx, cnt[a[i]]);
}
vector<vector<int>> mp(mx + 1);
vector<int> ans;
for (auto [x, y] : cnt) {
mp[y].emplace_back(x);
}
for (int i = mx; i; i--) {
if (!mp[i].empty()) {
for (auto j : mp[i]) {
ans.emplace_back(j);
k--;
if (!k) {
break;
}
}
if (!k) {
break;
}
}
}
return ans;
}
};

浙公网安备 33010602011771号