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

本文解析如何利用哈希表和小顶堆数据结构解决LeetCode题目692,通过C++实现找出给定字符串中出现频率最高的前k个单词。涉及迭代器、lambda表达式及优先队列的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣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;
    }
};

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值