LeetCode 347 Top K Frequent Elements

333 阅读1分钟

LeetCode 347 Top K Frequent Elements

思路

遍历一次数组,统计每个元素的频率。然后按照频率为key,将元素放进一个value为vector的map里。该map的key按照从大到小排序。

代码

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> frequency;
        
        for (const auto &num : nums) 
            ++frequency[num];
        
        map<int, vector<int>, greater<int>> mp;
        
        for (auto i = frequency.begin(); i != frequency.end(); ++i) {
            if (!mp.count(i->second)) {
                mp[i->second] = vector<int>{i->first};
            }
            else mp[i->second].push_back(i->first);
        }
        
        vector<int> result;
        for (auto i = mp.begin(); result.size() < k; ++i) {
            result.insert(result.begin(), (i->second).begin(), (i->second).end());
        }
        
        return result;
        
    }
};