zoukankan      html  css  js  c++  java
  • [leetcode]692. Top K Frequent Words频率最高的前K个单词

    这个题的排序是用的PriorityQueue实现自动排列,优先队列用的是堆排序,堆排序请看:http://www.cnblogs.com/stAr-1/p/7569706.html

    自定义了优先队列的排序方法,lambda表达式该复习下了...

    public List<String> topKFrequent(String[] words, int k) {
            /*
            1.建立字符串和出现频率的映射
            2.用优先队列PriorityQueue实现排序(相同频率用compareTo方法)
            4.挑选出前k个
             */
            Map<String,Integer> map = new HashMap<>();
            //这里要用lambda表达式自定义排序:
            //如果相同频率,就按字典顺序升序排列(a在前,b在后),不同频率要根据map中的频率降序排列
            PriorityQueue<String> p = new PriorityQueue<>(
                    (a,b)->(map.get(a)==map.get(b))?a.compareTo(b):(map.get(b)-map.get(a))
            );
            //映射
            for (int i = 0; i < words.length; i++) {
                map.put(words[i],map.getOrDefault(words[i],0)+1);
            }
            //排序
            for (String s :
                 map.keySet()) {
                p.offer(s);
            }
            //取出前k个
            List<String> res = new ArrayList<>();
            for (int i = 0; i < k; i++) {
                res.add(p.poll());
            }
            return res;
        }
  • 相关阅读:
    Pollard rho模板
    GDKOI2018游记
    BZOJ2599: [IOI2011]Race
    Codeforces914E. Palindromes in a Tree
    可以删点的并查集
    本月题量 180122晚-180222午
    51nod1238 最小公倍数之和 V3
    51nod1237 最大公约数之和 V3
    hdu5608:function
    51nod1244 莫比乌斯函数之和
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8337722.html
Copyright © 2011-2022 走看看