【leetcode】优先级队列的两种妙用:词频统计与动态中位数(附代码模板)

【leetcode】优先级队列的两种妙用:词频统计与动态中位数(附代码模板)


前言

🌟🌟本期讲解关于力扣的几篇题解的详细介绍~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-ZEEKLOG博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

目录

📚️1.前K个高频单词

🚀1.1题目描述

🚀1.2题目解析

🚀1.3代码编写

📚️2.数据流的中位数

🚀2.1题目描述

🚀2.2题目解析

2.2.1第一种思路

2.2.2第二种思路

🚀2.3代码编写

2.3.1第一种代码

2.3.2第二种代码

📚️3.总结

——前言:关于堆这个数据结构,想必大家多多少少已经了解,并熟悉过了;其中最经典的问题就是使用堆来解决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

Read more

机器学习:Python地铁人流量数据分析与预测系统 基于python地铁数据分析系统+可视化 时间序列预测算法 ✅

机器学习:Python地铁人流量数据分析与预测系统 基于python地铁数据分析系统+可视化 时间序列预测算法 ✅

博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅 点击查看作者主页,了解更多项目! 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅 1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅ 2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅ 1、项目介绍 技术栈: Python语言、Django框架、Echarts可视化、HTML、prophet 时间序列预测算法 项目介绍 1. 数据可视化层:基于Echarts可视化库与HTML搭建前端展示界面,支持多维度人流量数据可视化呈现,包括每年日均人流量趋势、每日人流量变化、地铁信息概况等,通过图表直观展现数据特征,提升数据解读效率。

By Ne0inhk

【算法面试必刷】15. 三数之和

目录 题目 题目链接 思路 复杂度 1. 排序阶段 2. 双指针搜索阶段 3. 总时间复杂度 4. 空间复杂度 代码 题目 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 题目链接 15. 三数之和 - 力扣(

By Ne0inhk

9种常用排序算法总结

一、插入排序 基本思想:每一趟将一个待排序的记录,按其关键字的大小插入到已经排序好的一组记录的适当位置上,直到全部待排序记录全部插入为止。 1.1 直接插入排序 排序过程: * 将待排序数组arr[1...n]看作两个集合,arr[1]为有序集合中元素,arr[2...n]为无序集合中元素,a[0]用来临时存放当前待排序记录 * 外层循环每次从无序集合中选择一个待插入元素(n-1次),每次使用顺序查找法,内层循环查找arr[i]在有序集合中的位置(将有序集合中大于待插入元素的记录后移一位) public class InsertionSort{ //直接插入排序方法 public static void insertionSort(int[] arr){ if (arr == null || arr.length<=1){ return; } //从第二个元素开始(

By Ne0inhk
【优选算法必刷100题:专题六】(模拟算法)第039~343题:替换所有的问号、提莫攻击、Z 字形变换、外观数列、数青蛙

【优选算法必刷100题:专题六】(模拟算法)第039~343题:替换所有的问号、提莫攻击、Z 字形变换、外观数列、数青蛙

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 🎬艾莉丝的算法专栏简介: 文章目录 * 039 替换所有的问号 * 1.1 解法:模拟的思想 * 1.2 算法实现 * 1.3 博主手记 * 040 提莫攻击 * 2.1 解法:模拟 + 分情况讨论 * 2.2 算法实现 * 2.3 博主手记 * 041 Z 字形变换

By Ne0inhk