2021.1.31 刷题(前K个高频元素-桶排序)

题目链接:https://leetcode-cn.com/problems/top-k-frequent-elements/
题目描述:

代码:
方法一:哈希+桶排序
首先依旧使用哈希表统计频率,统计完成后,创建一个数组(桶),每个桶存储出现频率相同的数。桶的下标表示数出现的频率,即第 i 个桶中存储的数出现的频率为 i。
把数都放到桶之后,从后向前遍历桶,最先得到的 k 个数就是出现频率最多的的 k 个数。
2021.1.31 刷题(前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;
    }
};
上一篇:【排序】桶排序 bucket sort


下一篇:[LeetCode] 1636. Sort Array by Increasing Frequency