本题想到的解法是使用哈希表首先统计数组中每个元素出现的次数,然后对出现次数进行排序,最后进行输出。看了题解学习到使用优先级队列 小顶堆来完成,小顶堆的排序规则由自己来定义。
代码如下:
class Solution {
public:class MyComparison{public:bool operator()(const pair<int, int> & p1, const pair<int,int> & p2){return p1.second > p2.second;}};vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int> mp;vector<int> result(k);for(int i = 0; i < nums.size(); i++){mp[nums[i]]++;}priority_queue<pair<int, int>, vector<pair<int,int>>, MyComparison> pri_que;for(unordered_map<int,int>::iterator it=mp.begin(); it != mp.end(); it++){pri_que.push(*it);if(pri_que.size() > k){pri_que.pop();}}for(int i = k-1; i >=0; i--){result[i] = pri_que.top().first;pri_que.pop();}return result;}
};