347. Top K Frequent Elements
1.問題
給予一個整數序列, 回傳前k個出現次數最多的成員

2.想法
Bucket sort
先計算每個數字出現的次數並推到無序容器, ex: unordered_map中
以次數為索引, 將(索引, 數字)推入有序器如vector中, 考慮相同出現次數的情況, 這邊可以用vector<vector<int>>
將排在後面的成員推入回傳的序列中
3.程式碼
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
if (nums.size() == 1)
{
return nums;
}
//Count
unordered_map<int, int> cnts;
for (auto num: nums) {
cnts[num]++;
}
//Push into buckets
vector<vector<int>> bucket(nums.size() + 1);
for (auto cnt : cnts) {
bucket[cnt.second].push_back(cnt.first);
}
//Push the higher index into res
vector<int> res;
int index = 0;
for (int i = bucket.size() - 1 ; i >= 0; i--) {
if (bucket[i].size() != 0 && index < k)
{
for (auto v: bucket[i]) {
index++;
res.push_back(v);
}
}
}
return res;
}
};
4.Performance

Last updated