桶排序
leetcode 347. 前 K 个高频元素
顾名思义,桶排序的意思是为每个值设立一个桶,桶内记录这个值出现的次数(或其它属
性),然后对桶进行排序。
红色代表频率。
最后,我们从后往前遍历,直到找到k个旧桶。
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { // 使用字典,统计每个元素出现的次数,元素为键,元素出现的次数为值 unordered_map<int, int> counts; int max_count = 0; // 最大的频率,可作为后面数组的大小 for (auto& num: nums) { max_count = max(max_count, ++counts[num]); } //桶排序 //将频率作为数组下标,对于出现频率不同的数字集合,存入对应的数组下标 vector<vector<int>> bucket(max_count+1); for (auto& p: counts) { bucket[p.second].push_back(p.first); } // 倒序遍历数组获取出现顺序从大到小的排列 vector<int> ans; for (int i = max_count; i >= 0; --i) { for (auto& num: bucket[i]){ ans.push_back(num); } if (ans.size() == k) { break; } } return ans; } };