题目链接
英文链接:https://leetcode.com/problems/top-k-frequent-words/
中文链接:https://leetcode-cn.com/problems/top-k-frequent-words/
题目详述
给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
示例 1:
1 | 输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2 |
示例 2:
1 | 输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4 |
注意:
- 假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。
- 输入的单词均由小写字母组成。
扩展练习:
- 尝试以 O(n log k) 时间复杂度和 O(n) 空间复杂度解决。
题目详解
堆的运用。
- 首先运用 Map 统计单词出现次数。
- 求前K个高频单词,构建一个小顶堆。
- 遍历 map 的 ketSet,加入小顶堆并保持堆的大小为 k。
- 最后一个一个取出堆中的元素。
- 注意由于是小顶堆,最先取出的元素是最后一个元素,要翻转结果链表。
1 | public class LeetCode_00692 { |