692. Top K Frequent Words


/*
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;
}
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值