347. Top K Frequent Elements

Problem:

Given a non-empty array of integers, return the k most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]

Example 2:

Input: nums = [1], k = 1
Output: [1]

Note:

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.-
  • Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

思路

Solution (C++):

vector<int> topKFrequent(vector<int>& nums, int k) {
    unordered_map<int, int> frequency;
    for (auto num : nums)  ++frequency[num];
    priority_queue<pair<int, int>> pri_que;
    vector<int> res;
    
    for (auto it = frequency.begin(); it != frequency.end(); ++it) {
        pri_que.push(make_pair(it->second, it->first));
        if (pri_que.size() > frequency.size() - k) {
            res.push_back(pri_que.top().second);
            pri_que.pop();
        }
    }
    return res;
}

性能

Runtime: 24 ms  Memory Usage: 9.2 MB

思路

Solution (C++):


性能

Runtime: ms  Memory Usage: MB

相关链接如下:

知乎:littledy

欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

作者:littledy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/dysjtu1995/p/12654369.html