【leetcode】优先级队列的两种妙用:词频统计与动态中位数(附代码模板)
前言
🌟🌟本期讲解关于力扣的几篇题解的详细介绍~~~
🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-ZEEKLOG博客
🔥 你的点赞就是小编不断更新的最大动力
🎆那么废话不多说直接开整吧~~

目录
——前言:关于堆这个数据结构,想必大家多多少少已经了解,并熟悉过了;其中最经典的问题就是使用堆来解决TOPK问题,但是除次之外,堆的构建以及堆来求解中位数,那么不知道大家了解过没有~~~
📚️1.前K个高频单词
🚀1.1题目描述
给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。
第一种情况:
输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"] 解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
注意,按字母顺序 "i" 在 "love" 之前。
第二种情况:
输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,出现次数依次为 4, 3, 2 和 1 次
具体解析过后就是:求出现次数最多的单词,如果次数一样,就按照字典顺序进行排序操作~~
🚀1.2题目解析
看到前k个这个关键字,咱们想到的就是堆排。统计单词出现的个数,那么很明显就是使用哈希表来实现我们的单词和次数的存储,即一个字符串类型记录单词,一个整数类型记录出现的次数;
但是~~,本题最关键的问题就是,在满足两者次数相同的时候,这个按照字典序列进行排序,这个就是一个关键;
思路:
第一种情况:按照次数进行入堆的操作,那么我们要找次数大的那么就直接创建一个小根堆
第二种情况:遇到次数相同的,那么字典序小的在前面,那么创建一个大根堆

即找前几小的,创建大根堆;找前几大的,创建小根堆;
那么这里关键就是如何创建我们的堆了;
所以总结:
1.将我们的字符串数组遍历,将对应的字符串和次数存入哈希表中
2.依据条件创建我们的堆
3.遍历我们的哈希表存入我们的堆中
4.获取结果
🚀1.3代码编写
代码如下:
class Solution { public List<String> topKFrequent(String[] words, int k) { Map<String,Integer> map = new HashMap<>(); //遍历我们的字符数组进行添加 for(Stri