力扣练习——前K个高频单词(AC)

本文介绍了LeetCode中关于找到前K个高频单词的问题,提供了两种解决方案:一种是通过哈希表与pair比较实现,另一种是利用字符串数组结合哈希表的出现次数进行排序。示例与输入输出格式清晰,适合算法学习。

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

69 前K个高频单词

1.问题描述
给一非空的单词列表,返回前 k 个出现次数最多的单词。

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

示例 1:

输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2

输出: [“i”, “love”]

解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。

注意,按字母顺序 "i" 在 "love" 之前。

示例 2:

输入: [“the”, “day”, “is”, “sunny”, “the”, “the”, “the”, “sunny”, “is”, “is”], k = 4

输出: [“the”, “is”, “sunny”, “day”]

解析: “the”, “is”, “sunny” 和 “day” 是出现次数最多的四个单词,

出现次数依次为 4, 3, 2 和 1 次。

2.输入说明 :

首先输入单词列表的单词数目n,

然后输入n个单词,以空格分隔

最后输入整数k。

假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。

输入的单词均由小写字母组成。

3.输出说明:
按题目要求输出,单词之间以一个空格分隔,行首和行尾无多余空格。
4.范例
输入
6
i love leetcode i love coding
2

输出
i love
5.代码

#include<iostream>
#include<map>
#include<string>
#include<unordered_map>
#include<algorithm>
#include<string.h>
#include<sstream>
#include <vector>

using namespace std;

/*法一:使用pair进行排序*/
bool cmp(pair<string, int>a,  pair<string, int>b)
{
   
	return b.second == a.second ? a.first <b.first : a.second >b.second;
}
 void OrderByFreq(vector<string>words, int k ) {
   

	int n = words.size();//总单词个数
	if (n 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值