[抄题]:

给一个单词列表,求出这个列表中出现频次最高的K个单词。

[思维问题]:

  1. 以为已经放进pq里就不能改了。其实可以改,利用每次取出的都是顶上的最小值就行了。(性质)
  2. 不知道怎么处理k个之外的数:先把peak, newpair拿出来

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 比较之前要新建对象。right.key.compareTo(left.key)是反的,而且需要单独写出来,因为比较的是key是否相同
  2. for (String word : words),word的作用类似于i,作为临时变量来使用
  3. 取出所有的key,用的是counter.keySet()
  4. 用comparator的compare方法来比较
  5. Q.poll().key表示取出头元素

[二刷]:

  1. comparator是自己定义的,除了heap中,别的地方不能用,加关键字private
  2. pq里装的是pair, 不是string
  3. pair类中的函数是public pair,不是int

[三刷]:

  1. 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的更多相关文章

  1. 华为OJ2051-最小的K个数(Top K问题)

    一.题目描述 描述: 输入n个整数,输出其中最小的k个. 输入: 输入 n 和 k 输入一个整数数组 输出: 输出一个整数数组 样例输入: 5 2 1 3 5 7 2 样例输出: 1 2 二.Top ...

  2. [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 ...

  3. hihoCoder 1133 二分·二分查找之k小数(TOP K算法)

    #1133 : 二分·二分查找之k小数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很 ...

  4. 必考算法之 Top K 问题

    大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...

  5. top(k,n)—db kernel队解题思路

    0. 比赛 公司里的第三届XX中间件性能挑战赛 我和另外两个P5组队参加,队名为"db kernel".最后获得了第八,应该是P5里的最高排名. 以下简单扼要地介绍一下题目,以及我 ...

  6. [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 ...

  7. [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 ...

  8. Top K Frequent Elements 前K个高频元素

    Top K Frequent Elements 347. Top K Frequent Elements [LeetCode] Top K Frequent Elements 前K个高频元素

  9. [LeetCode] 347. Top K Frequent Elements 前K个高频元素

    Given a non-empty array of integers, return the k most frequent elements. Example 1: Input: nums = [ ...

随机推荐

  1. 原创)CentOS6.4下安装xampp(一定要在linux上下载)

    一.xampp下载地址: http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/1.8.3/ 二.我下载的是xampp-linux-x64 ...

  2. 第15章 高并发服务器编程(1)_非阻塞I/O模型

    1. 高性能I/O (1)通常,recv函数没有数据可用时会阻塞等待.同样,当socket发送缓冲区没有足够多空间来发送消息时,函数send会阻塞. (2)当socket在非阻塞模式下,这些函数不会阻 ...

  3. 清理mysql binlog日志

    1.查看binlog日志 mysql> show binary logs; +------------------+------------+| Log_name         | File_ ...

  4. 如何使用change命令改变密码的属性

    使用chage更改用户密码密码使用情况 -d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码 -m //设置用户两次改变密码之间使用"最小天数" -M //设置用户两次 ...

  5. Java 权限框架 Shiro 实战二:与spring集成、filter机制

    转自:https://www.cnblogs.com/digdeep/archive/2015/07/04/4620471.html Shiro和Spring的集成,涉及到很多相关的配置,涉及到shi ...

  6. 24.OGNL与ValueStack(VS)-集合对象初步

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...

  7. 17.在Action获取Scope对象

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 引言:在前面的Action操作中,关键就是Action中的exectue方法 ...

  8. delphi 泛型 c++builder 泛型

    delphi 泛型 System.Generics.Collections.pas TList<T> http://docwiki.embarcadero.com/Libraries/Be ...

  9. input文本框 放上图片img 通过padding relative和absolute 的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. as3 文档类判断是否被加载

    if (!stage) { trace(("被加载->this.parent:" + this.parent)); }else { trace(("单独打开-> ...