692. 前K个高频单词
给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
示例 1:
输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
注意,按字母顺序 "i" 在 "love" 之前。
解析
这里我们直接使用map进行计数,然后利用PriorityQueue对于map.entry进行排序即可。
class Solution {
public List<String> topKFrequent(String[] words, int k) {
Map<String, Integer> map = new HashMap<>(words.length);
// 建立哈希表统计单词频率
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
PriorityQueue<Map.Entry<String,Integer>> heap = new PriorityQueue<>((o1,o2)->{
int res = o2.getValue()-o1.getValue();
if(res==0){
return o1.getKey().compareTo(o2.getKey());
}
return res;
});
heap.addAll(map.entrySet());
List<String> lst = new ArrayList<>();
for(int i = 0 ;i < k;i++){
lst.add(heap.poll().getKey());
}
return lst;
}
}
注意:本文归作者所有,未经作者允许,不得转载