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;
    }
};
posted @ 2026-03-30 14:29  rdcamelot  阅读(19)  评论(0)    收藏  举报