题目链接:https://leetcode-cn.com/problems/top-k-frequent-elements/
题目描述:
代码:
方法一:哈希+桶排序
首先依旧使用哈希表统计频率,统计完成后,创建一个数组(桶),每个桶存储出现频率相同的数。桶的下标表示数出现的频率,即第 i 个桶中存储的数出现的频率为 i。
把数都放到桶之后,从后向前遍历桶,最先得到的 k 个数就是出现频率最多的的 k 个数。
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> record;
vector<int> result;
//元素值作为key,相同元素频率作为value
int max_freq = 0;
for(int i = 0; i < nums.size(); i++)
{
record[nums[i]] += 1;
if(record[nums[i]] > max_freq)
max_freq = record[nums[i]] ;
}
vector<stack<int>> bucket(max_freq+1, stack<int>());
//遍历record,将频率相同的元素放在一起
for(auto &iter :record )
{
bucket[iter.second].push(iter.first);
//cout << bucket[iter.second].top() << endl;
}
for(int i = bucket.size() - 1; i > 0 && result.size() < k; i-- )
{
while(!(bucket[i].empty()))
{
result.push_back(bucket[i].top());
bucket[i].pop();
}
}
return result;
}
};