最高频的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 = [ ...
随机推荐
- C# AtomicInt
using System; using System.Threading; /// <summary> /// Provides lock-free atomic read/write u ...
- myeclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
任何软件快捷键失效99%的原因是跟其他软件的快捷键冲突了,经过检查,是跟搜狗输入法的简繁体切换快捷键Ctrl+Shift+F 冲突了,打开搜狗工具箱中的属性设置: 在属性设置中找到“按键”,将简繁体快 ...
- 暴搜 - Codeforces Round #327 (Div. 2) E. Three States
E. Three States Problem's Link Mean: 在一个N*M的方格内,有五种字符:'1','2','3','.','#'. 现在要你在'.'的地方修路,使得至少存在一个块'1 ...
- selenium+python自动化90-unittest多线程执行用例
前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...
- rabbitMQ 的基本知识
参考: https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html
- 配置文件 .properties 的使用。
在代码中使用 @Controller public class IndexController { @Value("${CONTENT_LUNBO_ID}") private Lo ...
- TP5常量
预定义常量 EXT 类库文件后缀(.php) THINK_VERSION 框架版本号 路径常量 DS 当前系统的目录分隔符 THINK_PATH 框架系统目录 ROOT_PATH 框架应用根目录 AP ...
- ajax方式表单拦截
html <!DOCTYPE html> <html> <head> <title></title> <meta charset=&q ...
- 使用spring注解——定义bean和自动注入
对于java bean的定义和依赖配置,使用xml文件真心是不方便. 今天学习如何用注解,解决bean的定义和注入. 常用注解: 1.自动注入:@Resources,@Autowired 2.Bean ...
- Activity服务类-2 EngineService服务类
一共提供了9个接口 //获取RepositoryServiceRepositoryService getRepositoryService();//获取RuntimeServiceRuntimeSer ...