[LeetCode]347. Top K Frequent Elements

来源:互联网 发布:人民网软件下载 编辑:程序博客网 时间:2024/05/03 11:01

347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

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.


class Solution {public:    vector<int> topKFrequent(vector<int>& nums, int k) {        unordered_map<int,int> hash;        for(int num : nums){            hash[num]++;        }        vector<int> result;        // pair<first, second>: first->value,  second->key        // 最大顶堆        priority_queue<pair<int,int>> pq;         for(auto it = hash.begin(); it != hash.end(); it++){            pq.push(make_pair(it->second, it->first));            // 如果优先队列长度 > hash的长度-k,则现在的堆顶元素肯定是结果之一            if(pq.size() > hash.size() - k){                result.push_back(pq.top().second);                pq.pop();            }        }        return result;    }};