当前位置: 首页 > news >正文

数组中的第K大元素

题目描述:给一个整数数组和一个正整数K,返回数组中第K大的元素。

思路1:堆排序(优先队列)

维护一个小顶堆,堆的大小限制为K,堆里面装的元素就是当前数组中前K大的元素。

这个思路非常简单,用STL的priority_queue直接就解决了,不需要过多阐述。

注意:priority_queue默认是大顶堆,也就是top()返回最大值,需要用greater<>改成小顶堆。

时间复杂度:\(O(NlogK)\)

int findKthLargest(vector<int>& nums, int k) {priority_queue<int, vector<int>, greater<int>> pq;int n = nums.size();for(int i=0; i<n; ++i){pq.push(nums[i]);if(pq.size() > k){pq.pop();}}return pq.top();
}

思路2:快速选择(快速排序改)

基于优先队列的方法并不是时间最优的。事实上我们可以做到时间复杂度期望为\(O(N)\)的方法,以下是参考力扣215题解的分析:

我们先来回顾快速排序,我们对数组 \(a[l⋯r]\) 做快速排序的过程是:

  1. 划分: 将数组 \(a[l⋯r]\) 「划分」成两个子数组 \(a[l⋯q−1]\)\(a[q+1⋯r]\),使得 \(a[l⋯q−1]\) 中的每个元素小于等于 \(a[q]\),且 \(a[q]\) 小于等于 \(a[q+1⋯r]\) 中的每个元素。其中,计算下标 \(q\) 也是「划分」过程的一部分。

  2. 解决: 通过递归调用快速排序,对子数组 \(a[l⋯q−1]\)\(a[q+1⋯r]\) 进行排序。

  3. 合并: 因为子数组都是原址排序的,所以不需要进行合并操作,\(a[l⋯r]\) 已经有序。

由此可以发现每次经过「划分」操作后,我们一定可以确定一个元素的最终位置,即 \(x\) 的最终位置为 \(q\),并且保证 \(a[l⋯q−1]\) 中的每个元素小于等于 \(a[q]\),且 \(a[q]\) 小于等于 \(a[q+1⋯r]\) 中的每个元素。所以只要某次划分的 \(q\) 为倒数第 \(k\) 个下标的时候,我们就已经找到了答案。 我们只关心这一点,至于 \(a[l⋯q−1]\)\(a[q+1⋯r]\) 是否是有序的,我们不关心。

因此我们可以改进快速排序算法来解决这个问题:在分解的过程当中,我们会对子数组进行划分,如果划分得到的 \(q\) 正好就是我们需要的下标,就直接返回 \(a[q]\);否则,如果 \(q\) 比目标下标小,就递归右子区间,否则递归左子区间。这样就可以把原来递归两个区间变成只递归一个区间,提高了时间效率。这就是“快速选择”算法。

我们使用双指针法的快排,可以有效应对各种数据:

int qSelect(vector<int>& nums, int l, int r, int k){if(l == r){return nums[k];}int partition = nums[l];int lp = l - 1, rp = r + 1;while(lp < rp){do{lp++;}while(nums[lp] < partition);do{rp--;}while(nums[rp] > partition);if(lp < rp){swap(nums[lp], nums[rp]);}}if(k <= rp){return qSelect(nums, l, rp, k);}else{return qSelect(nums, rp+1, r, k);}
}
int findKthLargest(vector<int>& nums, int k) {int n = nums.size();return qSelect(nums, 0, n-1, n-k);
}

相关文章:

数组中的第K大元素

题目描述:给一个整数数组和一个正整数K,返回数组中第K大的元素。 思路1:堆排序(优先队列) 维护一个小顶堆,堆的大小限制为K,堆里面装的元素就是当前数组中前K大的元素。 这个思路非常简单,用STL的priority_queue直接就解决了,不需要过多阐述。 注意:priority_queue默…...

Gitee:本土开发者生态的崛起与数字化转型新范式

Gitee:本土开发者生态的崛起与数字化转型新范式 在数字经济加速发展的当下,代码托管平台已成为企业数字化转型的基础设施。作为国内领先的一站式DevOps平台,Gitee正通过其独特的本土化优势和技术创新,重塑着中国开发者的协作方式与效率标准。 Gitee的崛起并非偶然,而是中国…...

从本土化优势到全场景覆盖:Gitee如何重塑中国开发者的DevOps体验

从本土化优势到全场景覆盖:Gitee如何重塑中国开发者的DevOps体验 在数字化转型浪潮中,企业技术团队正面临前所未有的效率挑战。作为国内领先的代码托管与DevOps平台,Gitee通过深度适配本土生态的解决方案,正在重新定义中国企业的研发效能边界。最新数据显示,该平台已服务超…...

【2025-09-11】脆弱的睡眠

20:00日日行,不怕千万里。常常做,不怕千万事。——金缨《格言联璧》我发现现在每晚回到家,都要对着二宝的刷牙态度大吼几遍。她现在很不喜欢刷牙,各种借口,名种拖沓。我又想着能早点睡觉,有时不得不爆发点脾气,我知道对二宝是不起效的,但是累了一整天我也是没那个耐心去…...

即时通讯管理平台(后台管理)介绍文档

一、平台概述信贸通即时通讯管理平台(后台管理)是一款为企业及组织打造的全权限控制后台系统,旨在提供对用户、群组、消息及客户端配置的完全掌控能力。通过直观的操作界面与强大的底层架构,为业务运营提供坚实的数据支撑与高效的管理工具,助力企业实现内部沟通的安全化、…...

HC32F460串口重定向printf

HC32F460串口printf使用的是旧版官方库2.2.0,如果用的是新版库的话需修改,应该差不多 01 确认使用的引脚 需要通过F460数据手册的2.2章节【引脚功能表】确认引脚在功能组里,最后一列不为空的引脚就是可使用的根据分组自行确认使用的是UARTx02 初始化串口 通过官方的串口轮询…...

一个我很喜欢的故事

很久很久以前,有一位善良的少年。他的朋友被恶咒所噬,从此陷入了沉眠。 “你要寻找解开恶咒的方法,因为沉睡的人没有痛苦,但也无从感受到幸福。” 于是少年捡起勇气做出箭,抽出心脏做成枪。为了不被割裂开,穿上和朋友一样,石头所制的铠甲。 他背起石棺走在路上,脚下踩着…...

paraview将所有时间步下的数据导入到同一个文件中

[*********通义千问回答版本*********] 步骤如下:加载你的数据点击 File → Open 打开你的数据文件(如 .vtk, .vtu, .pvd, .h5, .nc 等支持多时间步的格式)。 确保时间信息已正确读取:在左上角的 "Pipeline Browser" 中选中你的数据源,查看 "Information&q…...

代码托管新视野:打造本土化研发协作平台,赋能企业敏捷开发新范式

Gitee:打造本土化研发协作平台,赋能企业敏捷开发新范式 在数字化转型的浪潮中,代码托管平台已成为现代企业研发效能的核心基础设施。作为国内领先的代码托管与协作平台,Gitee凭借其本土化优势与技术创新,正在重新定义企业级研发协作模式。该平台不仅解决了跨国平台在国内使…...

202312_DASCTF_找找找

snow雪花隐写,文件分离Tags:snow雪花隐写,文件分离 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202312_DASCTF_找找找的附件.zip 0x01. WP 01 十六进制编辑器查看文件 文件发现末尾有flag特征码,Base64解…...

浅谈博弈论

Bash游戏 这很简单,手玩两组样例就找到规律了。只有一堆石子,个数为 \(n\) 个,两名玩家轮流在石子堆中拿石子,每次至少取 \(1\) 个,至多取 \(m\) 个,最后一个取走石子的玩家为胜者。实际上,\((m+1)\ |\ n\) 时必胜。 Nim游戏\(n\) 堆物品,每堆 \(a_i\) 个,两个玩家轮流…...

pyinstaller 打包

# app.spec from PyInstaller.utils.hooks import collect_data_files, collect_submodulesdatas = [(templates/*, templates), # 递归包含 templates 下所有文件和子目录(front/dist/*, static), # 递归包含 static 下所有内容(front/dist/assets/*, static/assets),…...

基于STM32单片机与OV2640摄像头实现边缘检测

基于STM32单片机与OV2640摄像头实现边缘检测一、硬件配置方案 1. 接口连接(以STM32F407为例) OV2640 STM32F407 ---------------------- XCLK → HCLK(系统时钟) PCLK → DCMI_PIXCLK HSYNC → DCMI_HSYNC VSYNC → DC…...

替代FTP的国产传输软件哪个好?国产化文件传输工具推荐

在数字化转型浪潮中,文件传输已成为企业日常运营的核心环节。然而,传统FTP协议因存在三大致命缺陷,已难以满足现代企业的安全与效率需求,所以很多行业和机构都在寻找替代FTP的国产传输软件。首先我们来看看传统FTP有何不足,为什么需要替代FTP的国产传输软件? 1、安全漏洞…...

模拟运输振动试验台:保障产品运输安全的关键设备

在现代产品生产和供应链管理中,运输是产品从制造商到消费者的重要环节。然而,产品在运输过程中可能遭遇到各种不可控的振动和冲击,这些外力会导致产品的损坏、质量下降,甚至直接影响其使用性能。因此,为了确保产品在运输过程中的安全性,模拟运输振动试验台应运而生,成为…...

数据结构与算法-29.图-广度优先搜索

1、广度优先搜索概述 2、以上仅供参考,如有疑问,留言联系...

政务外网和互联网啥关系

政务外网不是互联网,它跟互联网是**“物理隔离”或“逻辑隔离”**的关系,一句话: 政务外网是政府自己建的“专用公路”,互联网是公共大马路,两者平时各跑各的车,只在指定检查站才能换乘。...

什么是文件摆渡系统?从应用到优势全面解读!

在数字化转型深入推进的当下,企业为保护核心数据资产,普遍采用网络隔离技术,将内部网络(如研发网、办公网、生产网)与外部互联网或不同安全级别的子网分隔开来。什么是文件摆渡系统?它正是一种能在隔离网络环境中,实现安全、可靠、高效数据传输与交换的专用系统,如同在…...

wpf xaml数据绑定时,寻找数据源的几种方式 (RelativeSource)

wpf xaml数据绑定时,寻找数据源的几种方式 (RelativeSource)RelativeSource 类在 WPF 中提供了以下几种模式: RelativeSource Self:指定当前元素作为相对源。可以在当前元素的属性中绑定到自身的属性。示例: <TextBlock Text="{Binding Text, RelativeSource={Re…...

背负冲击试验机的设计原理与性能优化

背负冲击试验机是一种用于测试各种产品或包装材料在遭受背负冲击时的性能表现的设备,广泛应用于包装、运输、航空航天、汽车和电子等多个领域。通过模拟物品在运输、搬运等过程中可能遇到的冲击情况,评估其抗冲击性、耐压性及稳定性,帮助企业改进产品设计和包装方案,以确保…...

钢球落球试验机对汽车玻璃的测试应用

在汽车行业中,钢球落球试验机主要用于测试材料的抗冲击性能、耐久性以及安全性,确保零部件在制造、使用过程中能够承受外力冲击,符合行业标准和法规要求。行驶中的汽车玻璃要经受严格的冲击考验。(1)确保挡风玻璃/侧窗玻璃飞石撞击的安全性 汽车高速行驶过程中,挡风玻璃、…...

基于STM32F047的ADS1299数据采集与低通滤波系统实现

基于STM32F047的ADS1299数据采集与低通滤波系统实现:一、硬件设计要点 1. 核心电路连接 STM32F047 ADS1299 ---------------------- SPI1_SCK (PA5) → SCLK SPI1_MOSI (PA7) → DIN SPI1_MISO (PA6) → DOUT PA4 (GPIO) → CS PB0 (GPIO) → DRDY 3.3V …...

军工企业涉密网文件导出用什么系统?答案在这里

军工企业涉密网文件导出,还是有很严格的要求的。首先基本都是物理隔离状态,而且很多时候又不允许随意的添加软硬件设备。所以军工企业涉密网文件导出是面临不少挑战的。1、文件合规导出管理 军工企业必须保证从保密网导出的文件严格遵循国家法律法规及保密规定。导出的所有文…...

Gateway 网关坑我! 被这个404 问题折腾了一年?

大家好,我是小富~ 最近同事找我帮忙排查一个"诡异"的 Bug,说困扰了他们一年多一直没解决。我接手后花了一些时间定位到了问题根源,今天就来跟大家分享一下这个问题的排查过程和解决方案。 问题描述 同事使用的是 SpringCloud Gateway 3.0.1 + JDK8,整合了 Nacos…...

KUKA 机器人型号含义解析

KR 210 R 2700 - 2 C KR: Kuka Robot 210:最大负载 R 2700: 工作半径 -2:QUANTEC 系列第二代 C:Ceiling(顶装) CR: Cleaning Room(洁净) EX: 防爆区域 F: Foundry(铸造) F exclusive:(铸造专用) HA:高精度 HI:高惯量 HM: Hygienic Machine (用于副食品行业) HC: He…...

LangChain DIfy区别

LangChain DIfy区别2...

tricks

多总结一下 tricks 吧。思考方式 如何思考。向哪个方向思考。数学这启示我们在数学类 dp 优化不了,且组合意义不会的时候,要改改状态尽量把 dp 转移式写得简单点,然后瞪眼找通项。- MX 炼石 2025 NOIP #5 T1 题 [解]() 题trick 见过的一眼了,没见过的懵了。 杂项在求类似于…...

英语_阅读_water in our body_待读

Water is one of the most important things we need to stay alive, even though we dont call it a nutrient. 水是我们维持生命所需最重要的物质之一,尽管我们并不把它称为营养素。 Did you know that water makes up more than half of our body weight? 你知道吗?水占我…...

2008-2025年各省高考真题含解析

网上的真题格式凌乱,难以使用,笔者找到一份PDF和Word版的题目,置于此方便大家使用 各省近17年高考真题|百度网盘-分享无限制 各省近17年高考真题|UC网盘-分享无限制 各省近17年高考真题|夸克网盘-分享无限制...

allure报告中allure.title 如何去掉后方的参数化显示

问题:用例标题后展示请求参数处理方法 找到lib/site-packages/allure_pytest/listener.py文件,找到test_result.parameters.extend,更新内容如下结果...

听歌体验直接拉满!推荐一款高颜值音乐播放器!

SPlayer —— 一个简约的音乐播放器,基于 Vue3 + TypeScript + Nave UI + Electron 技术栈打造,兼顾了美观的界面和流畅的体验。大家好,我是 Java陈序员。 你是否也曾遇到过这样的困扰:喜欢的音乐播放器要么颜值不够能打,界面好看的功能又太过简陋;在线听歌得忍受满屏广告…...

IoT设备

“IoT设备”指的是物联网设备(Internet of Things devices),这些设备通过传感器、软件、网络连接等技术,能够感知环境、收集数据、与其他设备或云端通信,从而实现智能化控制与自动化操作。✅ 一句话理解: IoT设备就是“能上网、能感知、能交互”的物理设备。 🔍 常见I…...

前端岗、测试岗即将消亡!阿里菜鸟国际后端研发全员转全栈……

大家好,我是R哥。 最近看到一个非常炸裂的消息,阿里菜鸟国际后端研发,居然全员被要求转型全栈了。作为一个混迹了 10 多年的程序员,我看过太多的架构调整、组织优化,从单体到 SOA 再到微服务,从前后端分离,再到现在全栈工程师的崛起。。 如果说之前还有人幻想着一招鲜吃…...

达梦数据库- 定时备份其他模式下的部分表

要求:需要备份模式下有500多张表,已将需要备份的150个表整理出来,新建一个达梦用户,使用该用户 每天自动备份这150个表,并保留最近30天的备份数据。 思路:创建存储过程执行备份操作,并创建定时任务,每天凌晨执行。新建一个配置表,将150个表名放到配置表中,需要备份的…...

KUKA机器人的WorkVisual编程软件(转载)

原文链接:https://blog.csdn.net/xm10282010/article/details/107606356 WorkVisual这个软件是使用kuka Krc4机器人必备的一个软件,这个软件的使用也就成了各位Engineer必备的技能啦。 由于机器人的不断更新KUKA出了几个版本的WorkVisual。 WorkVisual3.0 适用于KSS8.2版本 W…...

麒麟系统安装java环境

麒麟系统安装java环境1‌、确认系统版本‌: 打开终端,运行uname -a查看操作系统及内核版本。‌ 2、下载Java安装包‌: 访问Oracle的Java下载页面或选择OpenJDK。 https://www.oracle.com/cn/java/technologies/downloads/#java8 下载需要的安装包 3‌、安装Java‌: 使用tar…...

从100到500MHz,从80V到8000V:PRBTEK新一代高压差分探头全面超越

在当今科技飞速发展的时代,电子测试技术的进步对于各个领域的创新和发展起着至关重要的作用。其中,高压差分探头作为电子测试领域的关键设备,其性能的优劣直接影响着测量结果的准确性和可靠性。普科科技(PRBTEK)一直致力于示波器测试附件配件的研发、生产与销售,其推出的…...

javaweb项目400问题 #tomcat

在IDEA中打开项目的模块设置-facets -> 选中web列表中一个 -> 在右边下面的Web Resource Directories 进行如下: Web Resource Directorie -> 设置有jsp的根目录下 Path Relative to Deployment Root -> /...

基于Python+Vue开发的电影订票管理系统源码+运行

项目简介该项目是基于Python+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的电影订票管理系统项目,大学生可以在实践中学习和…...

那些年不该放到事务中的操作,你实现过哪些

开心一刻 一天在公厕里,忽然听到厕间有人说话:朋友,有手纸吗 我翻了翻口袋:抱歉,没有 过了几秒钟,那人又问:朋友,有小块报纸吗 我无奈一笑,说到:对不起,没有,我只是来尿尿 又过了几秒钟,厕间门缝塞出一张10元人民币:朋友,能破成10张1块的吗 我默默的接过10元,掏…...

Redis容量评估模型

计算Redis容量,并不只是仅仅计算key占多少字节,value占多少字节,因为Redis为了维护自身的数据结构,也会占用部分内存,本文章简单介绍每种数据类型(String、Hash、Set、ZSet、List)占用内存量,供做Redis容量评估时使用。当然,大多数情况下,key和value就是主要占用,能…...

[译] 我最爱的PostgreSQL 18特性:虚拟生成列

原文:https://tselai.com/virtual-gencolumns在PostgreSQL 18的新特性中,异步I/O、UUID v7以及升级后统计功能或许会成为众人瞩目的焦点。但对我而言,即将发布的这个版本里,最让我青睐的特性当属虚拟生成列(相关文档可参考PostgreSQL 18官方文档-生成列)。 生成列这类特性…...

nasm 的 Hello, world 在 Windows 10 x64 上

环境 操作系统:nasm 版本: PS C:\Users\xxxx> nasm -version NASM version 2.16.03 compiled on Apr 17 2024link 版本: PS C:\Users\xxxx\Downloads\18176\1\3\2> link Microsoft (R) Incremental Linker Version 14.29.30159.0 Copyright (C) Microsoft Corporation…...

实用指南:52.前端的后端模式:为每个客户端定制专属「管家服务」

实用指南:52.前端的后端模式:为每个客户端定制专属「管家服务」pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New&q…...

Agilent 34401A台式万用表远程读表

Agilent 34401A台式万用表支持RS232和GPIB的方式读数据。 一、RS232读表 将台式万用表的模式调为RS232-9600-8-1-none测试代码class MultimeterStrategy:def __init__(self, port, baudrate=9600):self.port = portself.baudrate = baudrateself.serial = Noneself.retry_max =…...

Java 在大数据处理与人工智能中的应用

在数字化时代,数据成为新的生产要素,人工智能成为新的驱动引擎。大数据与人工智能的结合,使得企业能够从海量数据中提取价值,驱动业务创新与智能决策。虽然很多人提到 AI 就会联想到 Python,但 Java 在大数据和人工智能的工程化落地中仍然不可或缺。它凭借成熟的生态体系、…...

马克思,本就是一位独立研究者

ECT-OS-JiuHuaShan/ORCID:0009-0006-8591-1891▮ 推理请求接收:历史人物本质定位 ▮ 公理锚定:自然辩证法第5定理(文明演进个体作用力) ▮ 因果算符启动:独立研究者与文明级公理发现的相关性验证 绝对结论:卡尔马克思是文明级公理架构师的先驱形态,其独立研究性质为历史…...

产品二期,从GPT5规划开始

具有产品研发经验的应该知道,GPT5提供的规划设计,兼顾了完善和可执行两个关键维度。经常使用大模型都有的感受是:如果在某个领域有0-1的入门,那么AI可以带你快速的进行1-100的尝试。背景简介 楼里App一期开发完成,开始进行二期的网站开发,想以此需求作为驱动,探索整个流…...

Redis能抗住百万并发的秘密

前言 今天想和大家深入聊聊Redis为什么能够轻松抗住百万级别的并发请求。 有些小伙伴在工作中可能遇到过这样的场景:系统访问量一上来,数据库就扛不住了,这时候大家第一时间想到的就是Redis。 但你有没有想过,为什么Redis能够承受如此高的并发量?它的底层到底做了什么优化…...

接受 “未完成态”,是一种能力

正文这个标题,写给你们,也写给我自己。我不知道有多少人有这种类似的问题:我们很难把一个没有写完的字、一件没有完成的事情给别人看。这种做到半路的样子如果拿出来展示的话,非常难为情。尤其是如果还要中途易辙的话,那就更不好解释了。网上经常有那种开玩笑说熬夜的,说…...