[抄题]:

给一个单词列表,求出这个列表中出现频次最高的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. iOS Xcode 调试技巧

    一 NSLog调试 官方文档:Logs an error message to the Apple System Log facility. 即NSLog不是作为普通的debug log的,而是err ...

  2. python多重继承C3算法

    python多重继承的MRO算法选择: 经典方式.Python2.2 新式算法.Python2.3 新式算法(C3).Python 3中只保留了最后一种,即C3算法 C3算法的解析: 1.多继承UML ...

  3. html大小写问题

    js中变量名,函数,关键字都区分大小写,如var i;和var I;是两个不同的变量. css中定义的元素名称不区分大小写的. html中,标签和标签属性统一使用小写形式,固有属性也一律使用小写,自定 ...

  4. Executor框架(四)周期/延时任务ScheduleThreadPoolExecutor

    ScheduledThreadPoolExecutor 介绍   ScheduledThreadPoolExecutor 是一个可以实现定时任务的 ThreadPoolExecutor(线程池).比 ...

  5. django-后台sms管理系统的css框架

    地址:https://adminlte.io/ 下载代码.使用index.html的页面及相关文件 通过下在线检查adminlte.io的后台的各种模块元素,仿写.

  6. WP runtime 获取cookie

    HttpBaseProtocolFilter httpBaseProtocolFilter = new HttpBaseProtocolFilter(); HttpCookieManager http ...

  7. 批量部署ssh私钥认证

    vim  batch_sshkey.sh #!/bin/bashcd /rootcat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keysfor ...

  8. Mysql binlog二进制日志

    Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的实际原sql语句都会被记录在binlog中. 优点:不需要记录每一 ...

  9. clamav杀毒软件的安装

    Linux Unix.Trojan.Elknot (Linux.BackDoor.Gates.5)木马清理 此恶意软件结合了传统后门程序和DDoS攻击木马的功能 前两天性能测试服务器被种马,cpu一直 ...

  10. Ubuntu下启动 Redis时, 提示 "Can't open the log file: Permission denied failed"

    问题来源:在删除var目录下的log文件时,将redis文件夹删除了.然后在重启时:/etc/init.d/redis-server start,提示: Starting redis-server: ...