leetcode692. 前K个高频单词

本文介绍如何使用哈希表和向量实现LeetCode题目Top K Frequent Words,通过自定义排序函数解决单词频率和字母顺序的并列排序问题。

原题链接:https://leetcode-cn.com/problems/top-k-frequent-words/

题意:

给一非空的单词列表,返回前 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

方法:哈希表,在向量vector中存入pair对,通过vector来进行哈希表value的排序

bool cmp(pair<string,int> a,pair<string,int> b)//定义vector中pair的排序方法

{

    if(a.second==b.second)

        return a.first<b.first;//返回比较短的那个

    return a.second>b.second;//返回次数出现最多的那个

}

class Solution {

public:

    vector<string> topKFrequent(vector<string>& words, int k) {

        vector<string> ret;//要返回的结果

        unordered_map<string,int> mp1;//哈希表

        vector<pair<string,int>> v1;//向量中放入键值对

        for(string &word:words)

        {

            mp1[word]++;

        }

        auto iter=mp1.begin();

        while(iter!=mp1.end())

        {   

            v1.push_back(*iter);//将哈希表中的每一项都存入向量中,向量中的每一项和哈希表中的每一项结构一致。

            iter++;

        }

        sort(v1.begin(),v1.end(),cmp);//通过向量进行排序

        auto iter1 = v1.begin();

        for(int i=0;i<k;i++)

        {

            ret.push_back(iter1->first);//迭代放入哈希表中value值最大的前k个元素

            iter1++;

        }

        return ret;

    }

};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值