题目:题目链接
思路: 求前k个出现频率高的数。先用map把各个数出现的频率记录,然后丢到优先队列里面,让优先队列按照频率进行排序。之后再输出就可以了。
上代码吧:
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int>un_mp;
priority_queue<pair<int, int> >pq;
for (const auto& num : nums)
un_mp[num]++;
for (auto& it : un_mp)
pq.push(make_pair(it.second, it.first));//优先队列是默认按第一个排序的,从大到小排序
vector<int>ans;
for (int i = 0; i < k; ++i) {
ans.push_back(pq.top().second);//注意first是数字出现频率,second才是这个数字
pq.pop();
}
return ans;
}
};
这题没有特别难吧,其他方法也不太会。尴尬了。
加油吧!!!