【LeetCode】升级打怪之路 Day 13:优先级队列的应用

今日题目:

  • 23. 合并 K 个升序链表 | LeetCode
  • 378. 有序矩阵中第 K 小的元素 | LeetCode
  • 373. 查找和最小的 K 对数字 | LeetCode
  • 703. 数据流中的第 K 大元素 | LeetCode
  • 347. 前 K 个高频元素 | LeetCode

目录

    • Problem 1:合并多个有序链表 【classic】
      • LC 23. 合并 K 个升序链表 ⭐⭐⭐⭐⭐
      • LC 378. 有序矩阵中第 K 小的元素
      • LC 373. 查找和最小的 K 对数字 【略有难度】
    • Problem 2:寻找第 k 个最大元素
      • LC 703. 数据流中的第 K 大元素 【classic】 ⭐⭐⭐⭐⭐
      • LC 347. 前 K 个高频元素 【easy】

优先级队列的特色是动态排序,插入的元素可以自动维护正确的顺序。其限制就是,优先级队列的限制是只能从队头和队尾操作元素。

一般来说,用到优先级队列的题目主要分两类:

  1. 一类是合并多个有序链表这类题
  2. 另一类是寻找第 k 个最大元素这类题

这两类题目都是经典题型,需要理解。

Problem 1:合并多个有序链表 【classic】

有很多题目在使用优先级队列时,解题思路都可以归结于“合并多个有序链表”,这里先学会使用 PriorityQueue 来解决合并多个有序链表的问题,再看看有哪些变形。

LC 23. 合并 K 个升序链表 ⭐⭐⭐⭐⭐

23. 合并 K 个升序链表 | LeetCode

这个题目可以用双指针法,但使用优先级队列更能解决这一大类问题。

这种题的基本思路就是:将每个链表的头节点入队,然后开始迭代,每轮迭代中,从队列中拿出堆顶元素(即最小元素),然后把这个节点的 next 节点入队,进入下一轮迭代。直到合并结束。

这种解题思路很巧妙地运用了各链表“升序”的特点以及优先级队列的好处。

class Solution {public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0) {return null;}PriorityQueue<ListNode> queue = new PriorityQueue<>(lists.length, (a, b) -> (a.val - b.val));ListNode vHead = new ListNode();ListNode curr = vHead;// 将各链表的头节点放入队列中for (var node: lists) {if (node != null) {queue.offer(node);}}while (!queue.isEmpty()) {var min = queue.poll();  // 获取当前堆中最小元素节点curr.next = min;curr = curr.next;if (min.next != null) {queue.offer(min.next);}}return vHead.next;}
}

LC 378. 有序矩阵中第 K 小的元素

378. 有序矩阵中第 K 小的元素 | LeetCode

这个题是上面“合并 K 个升序链表”的变形题,因为矩阵的每一行都是升序的,可以将矩阵的每一行视为一个升序链表,这样解题思路就与之前的是一样了,难度不大。

LC 373. 查找和最小的 K 对数字 【略有难度】

373. 查找和最小的 K 对数字 | LeetCode

一开始做这个题,没有想到如何使用 PriorityQueue,也没有将这个题转换到“合并 K 个升序链表”这个基本问题的思路上,导致出现多次提交错误。这个题目本质上还是合并 K 个升序链表的变形

这个题目可以这样想象将其转换为 K 个有序链表:将固定一个 nums1[i] 与 nums2 的各个元素进行相加,就可以一串升序的结果。所以每个 nums1 的元素可以按照上面这种方式得到一个链表,那么这个问题就转换为了 nums1.length 个升序链表的合并问题了。

举例子可以参考 labuladong 的讲解:

在这里插入图片描述

想清楚思路之后,难度也就还行了。

Problem 2:寻找第 k 个最大元素

这是 PriorityQueue 的另一个经典应用。直接通过题目来看一下。

LC 703. 数据流中的第 K 大元素 【classic】 ⭐⭐⭐⭐⭐

703. 数据流中的第 K 大元素 | LeetCode

这个题目是经典的利用 PriorityQueue 来寻找第 k 个最大元素的问题。

PriorityQueue 来寻找 Top K 的方法与排序等方法的关键区别在于:只找到 Top K,不排序 Top K

因为如果使用排序法的话,就是对所有元素排序,然后就可以找到 top K 了,但是使用 priority queue 的话,Top K 的 K 个元素的顺序都是可以不用排出来的。

解题思路:

top-k

来源:拜托,面试别再问我TopK了!!!

这里可以得到一个经验:保持小根堆一直为 K 的元素,就可以保证这 K 个元素是一个数据流的最大的 K 的元素,因为比他们小的元素都被 pop 出去了,因为小根堆的顶端是最小元素,所以每次 pop 出去的一定是最小元素。

代码实现:

class KthLargest {private int k;private PriorityQueue<Integer> heap;public KthLargest(int k, int[] nums) {this.k = k;this.heap = new PriorityQueue<>(k + 1);for (int num: nums) {heap.offer(num);if (heap.size() > k) {heap.poll();  // pop 出最小元素}}}public int add(int val) {heap.offer(val);while (heap.size() > k) {heap.poll();  // pop 出最小元素}return heap.peek();  // 堆中是最大的 K 个元素,堆顶就是这个 K 个元素中最小的那个,也就是第 K 大的元素}
}

LC 347. 前 K 个高频元素 【easy】

347. 前 K 个高频元素 | LeetCode

循环队列的经典应用,难度不大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝牙协议栈】【BR/EDR】【AVDTP】音视频分布传输协议

1. AVDTP概念 AVDTP即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协议),主要负责 A/V stream的协商、建立及传输程序,还指定了设备之前传输A/V stream的消息格式. AVDTP的传输机制和消息格式是以 RTP为基础的。RTP由 RTP Data Transfer Protocol (RTP)和…

【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图

一、知识点 1、基本定义 甘特图(Gantt chart )又称为横道图、条状图(Bar chart)&#xff0c;通过条状图来显示项目各活动的进 度情况。以提出者亨利劳伦斯甘特( Henry Laurence Gantt)先生的名字命名。 目前许多文档工具都可以画甘特图。 &#xff08;1&#xff09;我的举例 …

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡&#xff1f; 负载均衡&#xff0c;英文名称为Load Balance&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡&#xff1f; Nginx负载均衡可以大…

计算机网络-典型网络组网架构

前面基本网络知识已经能够满足中小企业的需要了&#xff0c;今天来看下一些基本网络组网架构。 首先网络是分层架构&#xff0c;从接入层到汇聚层再到核心层&#xff0c;然后接入运营商出口。内部包括有线网络、无线网络&#xff0c;出口一般可以使用路由器或者防火墙进行安全防…

StarRocks实战——vivo基于 StarRocks 构建实时大数据平台

目录 前言 一、数据挑战 1.1 时效性挑战&#xff0c;业务分析决策需加速 1.2 访问量挑战&#xff0c;性能与稳定性亟待提高&#xff0c;支撑业务稳定运行 1.3 计算场景挑战&#xff0c;难以满足业务复杂查询需求 1.4. 运维挑战&#xff0c;用户查询体验需优化 二、OLA…

WebDAV之π-Disk派盘+人生Life

人生Life是一款日程软件,在这款待办的日程软件当中各种功能极为的完善,完全的足够用户在日常当中的使用,你的待办方面的各种内容都能够在软件上面进行规划和填充,通过待办事项来帮助用户提高在日常当中的效率,对于用户来说这款待办事项的软件是绝佳的选择。 π-Disk派盘 …

java面试(jvm)

JVM内存模型 细分Eden&#xff1a; java类加载过程&#xff1f;双亲委派机制&#xff1f;一个对象从加载到JVM&#xff0c;再到被GC清除过程&#xff1f; JAVA类加载器&#xff1a;AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录…

2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年聚合工艺证模拟考试题库及聚合工艺理论考试试题是由安全生产模拟考试一点通提供&#xff0c;聚合工艺证模拟考试题库是根据聚合工艺最新版教材&#xff0c;聚合工艺大纲整理而成&#xff08;含2024年聚合工艺证…

ANSYS穿孔板随机微孔隙构建及力学模拟

多孔结构板在减轻结构重量、满足吸声功能等环境下应用广泛&#xff0c;本案例采用ANSYS Workbench对曲线边界孔洞的随机多孔板进行轴心受拉力学分析。 随机微穿孔板可采用CAD Voronoi插件构建&#xff0c;三维模型构建如下。 CAD Voronoi插件采用参数化建模方式&#xff0c;根…

Mysql去除重复项:力扣182. 查找重复的电子邮箱

题目链接&#xff1a;182. 查找重复的电子邮箱 - 力扣&#xff08;LeetCode&#xff09; 题目描述 sql语句 方法1&#xff1a;使用临时表 select Email from (select Email, count(Email) as numfrom Persongroup by Email ) as statistic where num > 1 ;方法2&#xff…

树状图怎么做?这个方法教你轻松制作

树状图怎么做&#xff1f;在日常生活和工作中&#xff0c;我们经常需要用到树状图来整理和展示信息。树状图不仅能够帮助我们清晰地表达层级关系&#xff0c;还能够让复杂的数据和信息一目了然。那么&#xff0c;如何制作一个既美观又实用的树状图呢&#xff1f;本文将为你详细…

【回溯算法】【组合问题】Leetcode 77.组合 216. 组合总和 III

【回溯算法】【回溯算法剪枝】 Leetcode 77.组合 216. 组合总和 III 回溯算法可以解决的问题Leetcode 77.组合解法1 回溯法三部曲&#xff0c;函数参数、终止条件和单层搜索逻辑解法一plus 回溯法剪枝 另一道组合回溯问题 216. 组合总和 III解法&#xff1a;回溯解法&#xff1…

ArcGIS学习(十一)公服设施服务区划分与评价

ArcGIS学习(十一)公服设施服务区划分与评价 本任务带来的内容是公服设施服务区划分与公服设施服务区评价。本任务包括两个关卡: 公服设施服务区划分公服设施服务区空间价值评价1.公服设施服务区划分 首先,来看看这个案例的场景和基础数据。我们以上海市图书馆为例进行分析…

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据&#xff1a;用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素&#xff1a;数据的基本单位&#xff0c;一个数据元素可由若干数据项组成。 数据结构&#xff1a;指相互之间存在一种或多种特…

VR 全景模式OpenGL原理

VR 全景模式OpenGL原理 VR 全景模式原理 VR 全景模式原理将画面渲染到球面上&#xff0c;相当于从球心去观察内部球面&#xff0c;观察到的画面 360 度无死角&#xff0c;与普通播平面渲染的本质区别在渲染图像部分&#xff0c;画面渲染到一个矩形平面上&#xff0c;而全景需…

啤酒:精酿啤酒与烤串的夜晚滋味

夏日的夜晚&#xff0c;微风拂面&#xff0c;星光璀璨。此时&#xff0c;能抚慰人心的莫过于与三五好友围坐一起&#xff0c;享受烤串与Fendi Club啤酒的美味。这种滋味&#xff0c;不仅仅是味蕾的盛宴&#xff0c;更是心灵的满足。 Fendi Club啤酒&#xff0c;每一滴都蕴含着大…

Apache SeaTunnel 2.3.4 版本发布:功能升级,性能提升

​Apache SeaTunnel团队自豪地宣布2.3.4版本正式发布&#xff01;本次更新聚焦于增强核心功能&#xff0c;改善用户体验&#xff0c;并进一步优化文档质量。 此次版本发布带来了多项重要更新和功能增强&#xff0c;包括核心与API的修复、文档的全面优化、Catalog支持的引入&…

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标&#xff1a;浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff08;不会有缝隙&#xff09;&…

机器学习专项课程03:Unsupervised Learning, Recommenders, Reinforcement Learning笔记 Week02

Week 02 of Unsupervised Learning, Recommenders, Reinforcement Learning 课程地址&#xff1a; https://www.coursera.org/learn/unsupervised-learning-recommenders-reinforcement-learning 本笔记包含字幕&#xff0c;quiz的答案以及作业的代码&#xff0c;仅供个人学习…

YOLOv9独家改进|使用HWD(小波下采样)模块改进ADown

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 HWD是一种下采样模型&#xff0c;应用了小波变换的方法。 ADown是YOLOv9中的下采样模块&#xff0c;对不同的数据场景具有一定的可学…