力扣692. 前K个高频单词(哈希+小顶堆)

力扣692. 前K个高频单词(哈希+小顶堆)

https://leetcode-cn.com/problems/top-k-frequent-words/

  1. 哈希记录次数
  2. 建立list,排序,形成小顶堆
  3. 输出前k个

几个注意的点:

1、迭代器的使用:C++迭代器(STL迭代器)iterator详解

正向:vector<pair<string, int>>::iterator it=sorted_list.begin();it!=sorted_list.end();it++

反向:vector<pair<string, int>>::reverse_iterator it=sorted_list.rbegin();it!=sorted_list.rend();it++

it->first     it->second     *it取内容

2、lambda 表达式,匿名函数,用在sort排序中,

class Solution {
public:
    
    vector<string> topKFrequent(vector<string>& words, int k) {
        map<string,int>mp;
        priority_queue<map<string,int>,vector<map<string,int>>,greater<map<string,int>>>pq;
        for(int i=0;i<words.size();i++)
        {
            mp[words[i]]++;
        }
        vector<pair<string, int>> sorted_list(mp.begin(), mp.end());
        sort(sorted_list.begin(),sorted_list.end(),[](const pair<string, int>& p1,const pair<string, int>& p2){
            if(p2.second==p1.second)
            {
                return p2.first>p1.first;
            }
            return p2.second<p1.second;
        });
        vector<string>res;
        for(vector<pair<string, int>>::iterator it=sorted_list.begin();it!=sorted_list.end();it++)
        {
            res.push_back(it->first);
            if(res.size()==k)break;
        }
        return res;
    }
};

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值