/*
Acception of mine use buket
*/
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
vector<string> ans;
unordered_map<string, int> mp;
vector<vector<string>> buket(words.size() + 1,vector<string>());
for (auto s : words) ++mp[s];
for (auto kv : mp)
{
buket[kv.second].push_back(kv.first);
}
int count = 0;
for (int i = buket.size()-1; i >= 1;i--)
{
int nums = buket[i].size();
if (nums != 0)
{
sort(buket[i].begin(), buket[i].end());
for (int j = 0; j<nums;j++)
{
++count;
ans.push_back(buket[i][j]);
if (count == k) break;
}
}
if (count == k) break;
}
return ans;
}
};
// Accepiton of mine use heap
// use heap
typedef struct my_val my_val_t;
struct my_val
{
int count;
string s;
my_val(int n, string str):count(n),s(str){};
};
auto my_cmp =[](my_val_t& a1, my_val_t& a2)
{
return a1.count< a2.count || a1.count == a2.count && a1.s >a2.s;
};
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
vector<string> ans;
unordered_map<string, int> mp;
priority_queue<my_val_t,vector<my_val_t>,decltype(my_cmp)> pq(my_cmp);
for (auto s : words) ++mp[s];
for (auto kv : mp)
{
my_val_t mvt(kv.second,kv.first);
pq.push(mvt);
}
for(int i = 0; i<k;i++)
{
ans.push_back(pq.top().s);pq.pop();
}
return ans;
}
};
相关文章: