[前缀树]leetcode692:前K个高频单词(medium)

题目:
在这里插入图片描述
题解:

使用map代替前缀树,若手动实现前缀树感觉费力不讨好,最后还是要将<string, int>装到vector进行排序,所以直接用map就好啦。

代码如下:

class Solution {
public:
    //题解:用map代替前缀树
    vector<string> topKFrequent_1(vector<string>& words, int k) {
        if(words.empty()||k==0)return {};
        map<string,int> record_1;//单词->该单词出现的个数
        vector<string> result;
        for(const auto& word:words){
            record_1[word]++;
        }
        //由于map不支持value的sort排序,所以必须将map转换为vector才能进行sort自定义排序
        vector<pair<string,int>> record_2(record_1.begin(),record_1.end());
        //sort的第三个参数是lambda表达式,其实和传普通函数一样,sort的第三个参数是支持二元谓词的
        sort(record_2.begin(),record_2.end(),
             [](const pair<string,int>& a,const pair<string,int>& b)
             {
                 if(a.second==b.second)return a.first<b.first;
                 else return a.second>b.second;
              }
            );
        //将vector的前k个元素添加到result中
        for(const auto& r:record_2)
        {
            if(k--==0)break;
            result.push_back(r.first);
        }
        return result;
    }
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值