• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

【数据结构】算法 Top K Frequent Words 前K个高频单词

开发技术 开发技术 3小时前 2次浏览

目录
  • Top K Frequent Words 前K个高频单词
  • 思路
  • Tag

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


程序员灯塔
转载请注明原文链接:【数据结构】算法 Top K Frequent Words 前K个高频单词
喜欢 (0)