zoukankan      html  css  js  c++  java
  • 【数据结构】算法 Top K Frequent Words 前K个高频单词

    Top K Frequent Words 前K个高频单词

    给一非空的单词列表,返回前 k 个出现次数最多的单词。

    返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

    输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
    输出: ["i", "love"]
    解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
        注意,按字母顺序 "i" 在 "love" 之前。
     
    

    思路

    通过堆排序,主要设定排序的规则

    public List<String> topKFrequent(String[] words, int k) {
            HashMap<String, Integer> map = new HashMap<>();
            for (int i = 0; i < words.length; i++) {
                String s = words[i];
                map.put(s,map.getOrDefault(s,0)+1);
            }
            PriorityQueue<String> pq = new PriorityQueue<String>(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    Integer a = map.get(o1);
                    Integer b = map.get(o2);
                    int res =0;
                    if(a.equals(b)){
                        res = o2.compareTo(o1);
                    }
                    else {
                        res = a -b;
                    }
                    return res;
                }
            });
            for (Map.Entry<String, Integer> item : map.entrySet()) {
                pq.offer(item.getKey());
                if(pq.size()>k){
                    pq.poll();
                }
            }
            List<String> ans = new ArrayList<>();
            while(!pq.isEmpty()){
                ans.add(0,pq.poll());
            }
            return ans;
        }
    

    Tag

    heap

  • 相关阅读:
    topcoder srm 320 div1
    topcoder srm 325 div1
    topcoder srm 330 div1
    topcoder srm 335 div1
    topcoder srm 340 div1
    topcoder srm 300 div1
    topcoder srm 305 div1
    topcoder srm 310 div1
    topcoder srm 315 div1
    如何统计iOS产品不同渠道的下载量?
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14671205.html
Copyright © 2011-2022 走看看