来源: https://leetcode.com/problems/top-k-frequent-elements/discuss/81624/C%2B%2B-O(n-log(n-k))-unordered_map-and-priority_queue(maxheap)-solution
题目描述
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.
解题思路
利用unordered_map
和priority_queue
实现
#include <unodered_map>
#include <queue>
vector<int> topKFrequent(vector<int>& nums, int k)
{
//<unordered_map>
//key-value == 数组值-频率
unordered_map<int, int> map;
for (int num : nums)//简单的循环方法
{
map[num]++;//求出每一个数的出现的频率value,类比灰度分布图
}
vector<int> res;
//<queue>
// pair<first, second>: first is frequency, second is number
priority_queue<pair<int, int>> pq;
for (auto it = map.begin(); it != map.end(); it++)
{
pq.push(make_pair(it->second, it->first));//按频率进行排序即it->second
if (pq.size() > (int)map.size() - k)//找到前k个频率最大的数
{
res.push_back(pq.top().second);
pq.pop();
}
}
return res;
}
unordered_map
解释
https://www.cnblogs.com/tp-16b/p/9156810.html
priority_queue
解释
https://blog.csdn.net/weixin_36888577/article/details/79937886