class Solution { public List<String> topKFrequent(String[] words, int k) { List<String> ans = new ArrayList<>(); // 单词频率统计 Map<String, Integer> map = new HashMap<>(); for (String word : words) { if (!map.containsKey(word)) { map.put(word, 1); } else { map.put(word, map.get(word) + 1); } } // 出现次数相同时按照字母顺序进行排序,出现次数不同时按照频率进行排序; PriorityQueue<String> minHeap = new PriorityQueue<>( (o1, o2) -> (map.get(o1) == map.get(o2) ? o2.compareTo(o1) : map.get(o1) - map.get(o2)) ); for (String word : map.keySet()) { minHeap.offer(word); if (minHeap.size() > k) minHeap.poll(); } for (int i = 0; i < k; i++) { ans.add(minHeap.remove()); } Collections.reverse(ans); return ans; }}