每日OJ题_分治快排③_力扣215. 数组中的第K个最大元素

目录

力扣215. 数组中的第K个最大元素

解析代码


力扣215. 数组中的第K个最大元素

215. 数组中的第K个最大元素

难度 中等

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入: [3,2,1,5,6,4], k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

  • 1 <= k <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4
class Solution {
public:int findKthLargest(vector<int>& nums, int k) {}
};

解析代码

        TopK问题,用堆排思路写过,时间复杂度是O(N*logN),现在用三路划分的快排思想写一下,时间复杂度是O(N),《算法导论》里有两页的证明。

        思路:在快排中,当我们把数组「分成三块」之后: [begin, left] [left + 1, right - 1] [right, end] ,我们可以通过计算每一个区间内元素的个数,进而推断出最小的 k 个数在哪些区间里面。那么我们可以直接去相应的区间继续划分数组即可。

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {srand(time(nullptr));return qsort_topk(nums, 0, nums.size() - 1, k);}int qsort_topk(vector<int>& nums, int begin, int end, int k){   // 到begin和end区间找第k大元素if(begin == end)return nums[begin];int key = nums[rand() % (end - begin + 1) + begin];int i = begin, left = begin - 1, right = end + 1;while(i < right){if(nums[i] < key)swap(nums[++left], nums[i++]);else if(nums[i] == key)i++;elseswap(nums[--right], nums[i]);}// [begin, left] [left+1, right-1] [rignt, end]int c = end - right + 1; // 右区间元素个数int b = right - left - 1; // 中间区间元素个数if(c >= k) // 右区间元素个数>=k,到右区间找return qsort_topk(nums, right, end, k);else if(b + c >= k) // 右两区间元素个数>=k,返回中间区间元素return key;else  // 到左区间找第k-b-c大的return qsort_topk(nums, begin, left, k - b - c);}
};

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

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

相关文章

【学习笔记】SOA服务设计原则(二)举例说明

以银行系统为例 背景 在线银行系统允许用户进行各种银行业务,如查看账户余额、转账、支付账单等。为了支持这些功能,系统需要与账户管理、交易处理、账单支付等多个不同的服务进行交互。 应用SOA设计基本原则 标准化服务合约(Standardized Service Contract) 例子:所有服…

VAST Data步步攀升,整合AI堆栈,打造一体化AI平台:从存储根基走向全方位数据处理与分析

VAST Data公司正逐步从其商品化存储基础出发&#xff0c;构建一套统一的AI堆栈系统&#xff0c;致力于提供一站式AI解决方案。最近&#xff0c;VAST公司的现场CTO安迪珀斯坦纳在一次简报中传达了这一战略方向。 VAST提供了分散式QLC单层闪存架构的并行、横向扩展文件型存储系统…

kotlin与java的相互转换

Kotlin转java 将kotlin代码反编译成java Tools -> Kotlin -> Show Kotlin Bytecode 然后点击 【Decompile】 生成java代码 java转kotlin Code -> Convert Java File To Kotlin File

Docker数据管理及网络通信

目录 ------------------Docker 的数据管理--------------------- 1&#xff0e;数据卷 2&#xff0e;数据卷容器 -----------------端口映射----------------------------------- ------------------容器互联&#xff08;使用centos镜像&#xff09;---------------------…

科技论文编写思路

科技论文编写思路 1.基本框架2.课题可行性评估1.研究目标和意义2.研究方法和技术3.可行性和可操作性4.风险和不确定性5.经济性和资源投入6.成果预期和评估 3.写作思路4.利用AI读论文5.实验流程 1.基本框架 IntroductionRelated worksMethodExperiment and analysisDiscussionC…

ElasticSearch之Search Template和Index Alias

写在前面 本文看下es的search template和index alias。 1&#xff1a;search template 用来定义模板查询语句&#xff0c;运行时只需要将要查询的内容作为参数传进来即可&#xff0c;如下&#xff1a; 接着来测试下&#xff0c;首先来定义数据&#xff1a; DELETE tmdb/ P…

服务器防火墙的应用技术有哪些

服务器防火墙的应用技术有哪些 1.数据包过滤技术 数据包过滤是最基本的服务器防火墙技术之一&#xff0c;它根据一系列预定义规则过滤进出网络的数据包。数据包过滤器通常基于IP地址、端口号和协议类型等信息来判断数据包是否合法&#xff0c;如果不符合规则&#xff0c;则将被…

解决i18n国际化可读性问题,傻瓜式webpack中文支持国际化插件开发

先来看最后的效果 问题 用过国际化i18n的朋友都知道&#xff0c;天下苦国际化久矣&#xff0c;尤其是中文为母语的开发者&#xff0c;在面对代码中一堆的$t(abc.def)这种一点也不直观毫无可读性的代码&#xff0c;根本不知道自己写了啥 &#xff08;如上图&#xff0c;你看得出…

R语言在数据分析中的应用案例

一、引言 随着大数据时代的来临&#xff0c;数据分析已经成为了各行各业不可或缺的一部分。R语言&#xff0c;作为一款开源的统计计算和图形展示软件&#xff0c;因其强大的统计计算功能、丰富的包资源和灵活的编程特性&#xff0c;在数据分析领域得到了广泛的应用。本案例将通…

大语言模型LLM分布式框架:PyTorch Lightning框架(LLM系列14)

文章目录 大语言模型LLM分布式框架&#xff1a;PyTorch Lightning框架&#xff08;LLM系列14&#xff09;引言PyTorch Lightning分布式计算基础PyTorch Lightning核心架构概览LightningModule与分布式训练的兼容性LightningDataModule在分布式数据加载与预处理中的作用Trainer类…

Swagger3 使用详解

Swagger3 使用详解 一、简介1 引入依赖2 开启注解3 增加一个测试接口4 启动服务报错1.5 重新启动6 打开地址&#xff1a;http://localhost:8093/swagger-ui/index.html 二、Swagger的注解1.注解Api和ApiOperation2.注解ApiModel和ApiModelProperty3.注解ApiImplicitParams和Api…

大数据职业技术培训包含哪些

技能提升认证考试&#xff0c;旨在通过优化整合涵盖学历教育、职业资格、技术水平和高新技术培训等各种教育培训资源&#xff0c;通过大数据行业政府引导&#xff0c;推进教育培训的社会化&#xff0c;开辟教育培训新途径&#xff0c;围绕大数据技术人才创新能力建设&#xff0…

【华为面试基础题】求字符串中所有整数的最小和

描述 字符串s&#xff0c;只包含 a-z A-Z - &#xff1b; 合法的整数包括 1&#xff09; 正整数 一个或者多个0-9组成&#xff0c;如 0 2 3 002 102 2&#xff09;负整数 负号 - 开头&#xff0c;数字部分由一个或者多个0-9组成&#xff0c;如 -0 -012 -23 -00023 输入描述&…

targetSdkVersion > 30 如何将下载的网络视频 保存到手机相册里更新

在 targetSdkVersion 31 中&#xff0c;将下载的网络视频保存到手机相册中涉及几个关键步骤。由于 Android 12&#xff08;API 级别 31&#xff09;引入了更多的隐私和安全限制&#xff0c;特别是作用域存储&#xff08;Scoped Storage&#xff09;&#xff0c;因此你需要遵循这…

java特殊文件、日志技术、多线程

一、属性文件 1.1 特殊文件概述 像这种普通的文本文件&#xff0c;没有任何规律可言&#xff0c;不方便程序对文件中的数据信息处理。 在以后的Java开发过程中还会遇到一些特殊的文本文件&#xff0c;这些文件是有一些格式要求的&#xff0c;方便程序对文件中的数据进行处理。…

机器学习-02-机器学习算法分类以及在各行各业的应用

总结 本系列是机器学习课程的第02篇&#xff0c;主要介绍机器学习算法分类以及在各行各业的应用 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 定义问题&#xff08;Problem Definition&#xff09; -> 数据收集(Data Collection) -> 数据分割(Data…

自然语言处理: 第十三章Xinference部署

项目地址: Xorbitsai/inference 理论基础 正如同Xorbits Inference&#xff08;Xinference&#xff09;官网介绍是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&#xff0c;多模态模型等各种模型的推理。通…

Spring中 Unsupported class file major version 61 报错

初学Spring时遇到的一个错误&#xff1a;Unsupported class file major version 61 &#xff0c;如图所示&#xff1a; 网上查了一下大概是JDK的版本与Spring的版本不一致导致的错误&#xff1b;刚开始我用的Spring版本是&#xff1a; <dependencies><dependency>…

StarRocks实战——多维分析场景与落地实践

目录 一、OLAP 系统历史背景 1.1 历史背景与痛点 1.2 组件诉求 二、StarRocks 的特点和优势 2.1 极致的查询性能 2.2 丰富的导入方式 2.3 StarRocks 的优势特点 三、多维分析的运用场景 3.1 实时计算场景 / 家长监控中心 3.2 实时更新模型选择 3.2.1 更新模型UNIQU…

Eureka简介与使用浅析

Eureka 简介 Eureka 是 Netflix 开发的一款开源服务发现组件&#xff0c;主要用于构建云环境下的微服务架构。它是基于 REST (Representational State Transfer) 的服务&#xff0c;扮演了服务注册与发现的角色&#xff0c;在分布式系统中尤为重要。Eureka Server 作为一个中心…