力扣:(692. 前K个高频单词)

发布时间:2024年01月21日

题目1:
题目链接

在这里插入图片描述

思路1:首先可以使用map来统计单词出现的次数。然后使用vector将pair存起来,接着使用stable_sort排序(要保证数据具有稳定性),然后返回前k个单词即可。

难点:需要写一个比较函数(仿函数)

class Solution {
public:

struct Compare{

    //从大到小
    bool operator()(const pair<string, int>& kv1, const pair<string, int>& kv2)
    {
        return kv1.second > kv2.second;
    }
};
    vector<string> topKFrequent(vector<string>& words, int k) {
        
        //1.统计单词数量
        map<string, int> m;
        for(auto e:words)
        {
            m[e]++;
        }
        
        //2.放到vector中排序
        vector<pair<string, int>> v(m.begin(), m.end());
        stable_sort(v.begin(), v.end(), Compare());

        vector<string> vv;
        for(size_t i = 0; i<k ;i++)
        {
            vv.push_back(v[i].first);
        }

        return vv;
    }
};

**思路2:**因为stable_sort用的不多,所以我们将使用sort,通过控制仿函数,将它改为稳定的算法!

难点:将sort修改为稳定的!!

class Solution {
public:

struct Compare{

    //从大到小
    bool operator()(const pair<string, int>& kv1, const pair<string, int>& kv2)
    {
        //相等,小的在前面
        return kv1.second > kv2.second || (kv1.second==kv2.second)&&(kv1.first<kv2.first);
    }
};
    vector<string> topKFrequent(vector<string>& words, int k) {
        
        //1.统计单词数量
        map<string, int> m;
        for(auto e:words)
        {
            m[e]++;
        }
        
        //2.放到vector中排序
        vector<pair<string, int>> v(m.begin(), m.end());
        sort(v.begin(), v.end(), Compare());

        vector<string> vv;
        for(size_t i = 0; i<k ;i++)
        {
            vv.push_back(v[i].first);
        }

        return vv;
    }
};

思路3:使用优先级队列也可以。

文章来源:https://blog.csdn.net/weixin_45153969/article/details/135727766
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。