博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 692. 前K个高频单词(优先队列)
阅读量:2007 次
发布时间:2019-04-28

本文共 1451 字,大约阅读时间需要 4 分钟。

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 次。 注意:假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。输入的单词均由小写字母组成。 扩展练习:尝试以 O(n log k) 时间复杂度和 O(n) 空间复杂度解决。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/top-k-frequent-words
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 优先队列

struct cmp{
bool operator()(const pair
& a, const pair
& b) {
if(a.second == b.second) return a.first < b.first;//字典序大的在上面 return a.second > b.second;//数量小的在上面 }};class Solution {
public: vector
topKFrequent(vector
& words, int k) {
unordered_map
m; for(string& s : words) m[s]++;//计数 priority_queue
,vector
>,cmp> q; for(auto& mi : m) { if(q.size() < k)//维持大小为k的堆 q.push(mi); else//满了 { if(mi.second > q.top().second)//数量多,进去 { q.pop(); q.push(mi); } else if(mi.second == q.top().second && mi.first < q.top().first) { //数量一样,字典序小进去 q.pop(); q.push(mi); } } } vector
ans; while(!q.empty()) { ans.push_back(q.top().first); q.pop(); } reverse(ans.begin(), ans.end()); return ans; }};

16 ms 11.4 MB

你可能感兴趣的文章
JAVA学习笔记6 - 数组
查看>>
【学习笔记】Android Activity
查看>>
诡异的 Scroll view may have only one direct child placed within it 错误
查看>>
location区段
查看>>
linux内存的寻址方式
查看>>
how2heap-double free
查看>>
how2heap-fastbin_dup_consolidate
查看>>
tf keras SimpleRNN源码解析
查看>>
MyBatisPlus简单入门(SpringBoot)
查看>>
攻防世界web进阶区web2详解
查看>>
xss-labs详解(上)1-10
查看>>
xss-labs详解(下)11-20
查看>>
攻防世界web进阶区ics-04详解
查看>>
sql注入总结学习
查看>>
欧拉角(Euler angle) & 万向节死锁(Gimbal Lock) & 四元数(Quaternion)
查看>>
Linux png转jpg (convert命令)
查看>>
vscode git
查看>>
CodeForces - 456C Boredom (dp)
查看>>
CodeForces - 675A Infinite Sequence(简单数论 细节)
查看>>
CodeForces - 1042B Vitamins (思维)
查看>>