leetcode 692. 前K个高频单词

692. 前K个高频单词

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

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

​ 主要使用 [ 优先队列 ]+ [ 哈希表 ]

​ 哈希表保存单词出现的频率 , 优先队列保存他的优先级顺序。

class Solution {
    public List<String> topKFrequent(String[] words, int k) {
        // key: String
        // value: int
        Map<String, Integer> map = new HashMap();
        Queue<Map.Entry<String, Integer>> queue = new PriorityQueue<>((e, v) -> {
            if (e.getValue() - v.getValue() == 0) {
                return e.getKey().compareTo(v.getKey()); // 
            } else {
                return v.getValue() - e.getValue(); // 小根堆 ,频率大的在前面
            }
        });
        
        for (String word : words) {
            map.put(word, map.getOrDefault(word, 0) + 1);
        }
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            queue.offer(entry);
        }
        List<String> res = new ArrayList<>();

        while (!queue.isEmpty() && k!=0) {
            res.add(queue.poll().getKey());
            k--;
        }
        return res;
        // ["i","love","coding","leetcode"]
    }
}
原文地址:https://www.cnblogs.com/Lsummer-/p/14792136.html