Java教程

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

本文主要是介绍【数据结构】算法 Top K Frequent Words 前K个高频单词,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 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个高频单词的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!