最高频的K个单词 · Top K Frequent Words
[抄题]:
给一个单词列表,求出这个列表中出现频次最高的K个单词。
[思维问题]:
- 以为已经放进pq里就不能改了。其实可以改,利用每次取出的都是顶上的最小值就行了。(性质)
- 不知道怎么处理k个之外的数:先把peak, newpair拿出来
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:

[一刷]:
- 比较之前要新建对象。right.key.compareTo(left.key)是反的,而且需要单独写出来,因为比较的是key是否相同
- for (String word : words),word的作用类似于i,作为临时变量来使用
- 取出所有的key,用的是counter.keySet()
- 用comparator的compare方法来比较
- Q.poll().key表示取出头元素
[二刷]:
- comparator是自己定义的,除了heap中,别的地方不能用,加关键字private
- pq里装的是pair, 不是string
- pair类中的函数是public pair,不是int
[三刷]:
- peak, newpair要先取出来,因为不足k时添加的也是newpair
[四刷]:
[五刷]:
[总结]:
[复杂度]:Time complexity: O(nlgk) Space complexity: O(n)
[英文数据结构,为什么不用别的数据结构]:
pq 每次取出最小值,不用删除下面的元素 所以不用tree
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
347. Top K Frequent Elements,一模一样的:除了pair里的东西不一样
class Solution {
class Pair {
String key;
int value;
public Pair(String key,int value) {
this.key = key;
this.value = value;
}
};
private Comparator<Pair> pairComparator = new Comparator<Pair>() {
public int compare(Pair left,Pair right) {
if (left.value != right.value) {
return left.value - right.value;
}
return right.key.compareTo(left.key);
}
};
public List<String> topKFrequent(String[] words, int k) {
//HashMap
if (k == 0) {
return null;
}
HashMap<String,Integer> counter = new HashMap<String,Integer>();
for (String word : words) {
if (counter.containsKey(word)) {
counter.put(word,counter.get(word) + 1);
}
else if (!counter.containsKey(word)) {
counter.put(word,1);
}
}
//minHeap
Queue<Pair> Q = new PriorityQueue<Pair>(k,pairComparator);
for (String word : counter.keySet()) {
Pair peak = Q.peek();
Pair newPair = new Pair(word,counter.get(word));
if (Q.size() < k) {
Q.add(newPair);
}
else if (pairComparator.compare(newPair,peak) > 0) {
Q.poll();
Q.add(newPair);
}
}
//result
List<String> result = new ArrayList<String>();
while (!Q.isEmpty()) {
result.add(0,Q.poll().key);
}
return result;
}
}
最高频的K个单词 · Top K Frequent Words的更多相关文章
- 华为OJ2051-最小的K个数(Top K问题)
一.题目描述 描述: 输入n个整数,输出其中最小的k个. 输入: 输入 n 和 k 输入一个整数数组 输出: 输出一个整数数组 样例输入: 5 2 1 3 5 7 2 样例输出: 1 2 二.Top ...
- [Swift]LeetCode692. 前K个高频单词 | Top K Frequent Words
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- hihoCoder 1133 二分·二分查找之k小数(TOP K算法)
#1133 : 二分·二分查找之k小数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很 ...
- 必考算法之 Top K 问题
大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...
- top(k,n)—db kernel队解题思路
0. 比赛 公司里的第三届XX中间件性能挑战赛 我和另外两个P5组队参加,队名为"db kernel".最后获得了第八,应该是P5里的最高排名. 以下简单扼要地介绍一下题目,以及我 ...
- [LeetCode] Top K Frequent Words 前K个高频词
Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...
- [LeetCode] Top K Frequent Elements 前K个高频元素
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- Top K Frequent Elements 前K个高频元素
Top K Frequent Elements 347. Top K Frequent Elements [LeetCode] Top K Frequent Elements 前K个高频元素
- [LeetCode] 347. Top K Frequent Elements 前K个高频元素
Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...
随机推荐
- CA证书扫盲,https讲解
很多关于CA证书的讲解. 1.什么是CA证书. 看过一些博客,写的比较形象具体. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有 ...
- 学习MongoDB 六: MongoDB查询(游标操作、游标信息)(三)
一.简介 db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段.并返回到匹配文档的游标,可以随意修改查询限制.跳跃.和排序顺序的 ...
- pomelo RPC调用时新增字段缺失
接触pomelo开发一个月,正式开始参与项目开发有10天,遇到很多细节的坑,今天讲讲标题:后端服务器节点之间的rpc调用过程中,返回的数据中新增字段缺失问题. 先讲结果:原因是该rpc调用已经采用了p ...
- linux系统下修改文件夹目录权限-chmod
Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名 ...
- Configure First SpringMVC project in IntelliJ IDEA(fail)
Configure First SpringMVC project in IntelliJ IDEA 13 The Mechanism of Spring MVC frameworks by Java ...
- python3.5过滤网址和图片的函数自己亲测可用
def has_replace(tag): #过滤网址 real=re.sub(r'<a\shref=.+</a>', '',tag.decode(), count=0, flags ...
- zabbix监控vCenter报错,无法自动发现主机
公司机房停电检修,检修完成后重新上电,发现VCSA起不来了,尝试多次无法解决,无奈只好重装.重装VCSA 6.5U2之后又发现无法自动发现主机,报错如下: 'config.vpxd.stats.max ...
- MYSQL三大范式
第一范式:确保每列的原子性. 第一范式是最基本的范式. 数据库表中的字段都是单一属性的,不可再分. 只要是关系数据库都满足第一范式 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子 ...
- XE4 TStringDynArray 比 c6 的TStringList 好用 字符串 分解 分割 转换 TByteDynArray
TStringDynArray 动态数组 字符串 分解 分割 System::DynamicArray<System::UnicodeString> TByteDynArray, ...
- xe7 Unresolved external CSPIN.OBJ
工程里打开使用了CSPIN控件的界面窗体,再编译就好了 [ilink32 Error] Error: Unresolved external 'Vcl::Controls::TControl::Set ...