分治-快排-215.数组中的第k个最大元素-力扣(LeetCode)

一、题目解析

1、需返回排序好的第k个最大元素

2、要求时间复杂度为O(N)

二、算法原理

解法1:堆排序(大根堆) k*O(N)

借用大堆的性质,将元素插入到大堆中,按照k输出堆顶第k个元素

解法2:堆排序(小根堆) (N-k)*O(logN)

先建k个小堆,然后插入元素,依次与堆顶元素比较,比堆顶元素大,则pop(删除堆顶元素)掉堆顶元素,插入nums[i],最终小堆中存储前k个最大的数

解法3:分治-快排 O(N)

基于数组分三块+随机数选择元素

通过埋下随机数种子srand(time(NULL)),rand() % (right-left+1) + left,找到随机数下标,得到基准元素key

由i移动遍历数组,left = -1,right = nums.size()+1,如果nums[i]<key,    swap(nums[i++],nums[++left]);如果nums[i] == key,i++;如果nums[i]>key,swap(nums[i],nums[--right])

依据排序好的数组,统计区间各个元素的个数判断情况

三、代码示例

解法1:

int findKthLargest(vector<int>& nums, int k){sort(nums.begin(),nums.end(),greater<int>());return nums[k-1];// O(N)//大堆priority_queue<int> pq(nums.begin(),nums.end());while(--k){pq.pop();}return pq.top();//K*logN}

解法2:

int findKthLargest(vector<int>& nums, int k){//小堆//(N-K)*logNpriority_queue<int,vector<int>,greater<int>> pq(nums.begin(),nums.begin()+k);//建k个数的小堆for(int i = k;i < nums.size();i++){if(nums[i] > pq.top()){pq.pop();pq.push(nums[i]);}}return pq.top();}

解法3:

int findKthLargest(vector<int>& nums, int k){//快排srand(time(NULL));return qsort(nums,0,nums.size()-1,k);}int qsort(vector<int>& nums,int l,int r,int k){if(l == r) return nums[l];//随机选择基准元素int key = getRandom(nums,l,r);//基准元素分三块int left = l-1,right = r+1,i = l;while(i<right){if(nums[i]<key) swap(nums[++left],nums[i++]);else if(nums[i] == key) i++;else swap(nums[i],nums[--right]);}//分情况讨论int c = r - right +1,b = right - left - 1;if(c>=k) return qsort(nums,right,r,k);else if(b+c>=k) return key;else return qsort(nums,l,left,k-b-c);}int getRandom(vector<int>& nums,int left,int right){return nums[rand() % (right - left + 1) + left];}

看到最后,如果对您有所帮助,还请点赞、收藏和关注,我们下期再见!

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

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

相关文章

新手向:Python实现图片转ASCII艺术

Python实现图片转ASCII艺术&#xff1a;从零开始的完整指南Python实现图片转ASCII艺术的技术解析ASCII艺术是一种使用字符组合来表现图像的技术&#xff0c;这种技术源于早期计算机显示器的图形限制&#xff0c;如今已成为一种独特的数字艺术形式。ASCII艺术的应用场景十分广泛…

6.类与对象(二)

总结 本章写了封装、static成员以及代码块。 一、封装 1.封装的概念 封装简单来说就是被密封起来&#xff08;不让我们看见的东西&#xff09;&#xff0c;即被隐藏。 对于用户来说&#xff0c;并不需要关心的类&#xff0c;所实现的细节就会被封装&#xff08;隐藏&#x…

流形折叠与条件机制

1. 为什么要防止流形折叠&#xff08;mode collapse&#xff09; 流形折叠 生成器只学会输出极少数甚至单一模式&#xff08;mode&#xff09;的样本&#xff0c;而完全忽略数据分布的多样性。 后果一句话&#xff1a;“模型看起来生成了很多图&#xff0c;其实都在重复同一张…

《从零构建大语言模型》学习笔记2,文本数据处理1(以及tiktoken库无法下载gpt2参数,调用get_encoding时SSL超时的解决方法)

《从零构建大语言模型》学习笔记2&#xff0c;文本数据处理1 文章目录《从零构建大语言模型》学习笔记2&#xff0c;文本数据处理1前言1、分词2.将把提取出来的词元转换为数字ID3.添加特殊上下文标记4. 字节对编码&#xff08;以及tiktoken库无法下载gpt2参数&#xff0c;调用g…

【AI工具】解放双手,操控浏览器的工具对比,来了

&#x1f4d2;前言在github上面&#xff0c;有几个操作浏览器的mcp工具&#xff1a;browser-use / browser-usemicrosoft / playwright-mcpAgentDeskAI / browser-tools-mcphangwin / mcp-chrome想知道他们的区别吗&#xff0c;想知道那个更适合你吗&#xff0c;想。。。&#…

Linux 操作系统基础知识总结

1、操作系统总体介绍 CPU&#xff1a; 就像人的大脑&#xff0c;主要负责相关事情的判断以及实际处理的机制。 查询指令&#xff1a; cat /proc/cpuinfo 内存&#xff1a; 大脑中的记忆区块&#xff0c;将皮肤、眼睛等所收集到的信息记录起来的地方&#xff0c;以供CPU进行判断…

cudagraph 本质详解

理解 CUDA Graph 的本质,关键在于理解它解决了什么问题,以及它通过什么机制来解决这个问题。 一、 核心问题:传统 CUDA 编程的“CPU 瓶颈” 在 CUDA Graph 出现之前,我们通常使用 CUDA Stream 来向 GPU 提交任务。这是一个动态的过程: CPU 作为指挥官:CPU 循环地、逐条…

Spring MVC 父子容器深度解析:原理、实战与优化

1. 父子容器的定义与设计初衷一句话总结&#xff1a;父子容器的核心价值在于解耦 Web 层与业务层&#xff0c;实现职责分离与上下文隔离。1.1 父子容器的层次关系在 Spring MVC 中&#xff0c;容器分为两类&#xff1a;父容器&#xff08;Root ApplicationContext&#xff09;&…

AI赋能SEO关键词优化策略

内容概要 人工智能&#xff08;AI&#xff09;技术正深刻改变着搜索引擎优化&#xff08;SEO&#xff09;的实践方式&#xff0c;尤其在关键词研究这一核心领域带来了革命性的影响。本文聚焦于AI如何赋能SEO关键词优化策略&#xff0c;系统性地探讨其核心价值与应用路径。我们将…

虚拟机Ubuntu图形化界面root用户登录错误

当在 Ubuntu 图形界面登录 root 用户出现错误无法进入时 1. 检查 PAM 配置文件 PAM&#xff08;Pluggable Authentication Modules&#xff0c;可插拔认证模块&#xff09;负责管理用户认证相关的策略。图形登录界面的 PAM 配置文件通常是 /etc/pam.d/gdm-password 。以管理员权…

【杂谈】-逆缩放悖论:为何更多思考会让AI变“笨“?

逆缩放悖论&#xff1a;为何更多思考会让AI变"笨"&#xff1f; 文章目录逆缩放悖论&#xff1a;为何更多思考会让AI变"笨"&#xff1f;1、解码逆缩放现象2、AI 推理失效的五大症结3、AI 推理应对复杂度的策略图谱4、人工智能评估体系的反思5、人工智能推理…

强制用户更改WordPress密码的重要性及实现方法

确保 WordPress 网站的安全性是每位网站管理者的重要任务。在网络安全日益受到关注的今天&#xff0c;为用户提供安全、稳定的网络环境至关重要。而一个有效的方法就是强制用户定期更改密码。这篇文章将介绍为什么要强制用户更改密码以及如何在 WordPress 中实现这一功能。同时…

计算机基础速通--数据结构·串的应用

如有问题大概率是我的理解比较片面&#xff0c;欢迎评论区或者私信指正。 友友们&#xff0c;我遇到了一个大问题&#xff0c;技术类的英文面&#xff08;ai应用开发/java后端偏金融方向&#xff09;该如何准备&#xff1f;本人英语就过了个六级&#xff0c;脑阔疼额。友友们有…

05--STL认识(了解)

1. STL概念——标准模板库 STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL与CPP标准库的关系&#xff1a; 2. STL的版本 3. STL的组成 4. STL…

VBA经典应用69例应用9:ReDim语句的语法

《VBA经典应用69例》&#xff08;版权10178981&#xff09;&#xff0c;是我推出的第九套教程&#xff0c;教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开&#xff0c;这套教程案例众多&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以便…

连锁店管理系统的库存跟踪功能:数字化转型下的零售运营核心

在连锁零售行业&#xff0c;库存管理的效率直接决定着运营成败。传统人工库存管理模式早已难以应对全渠道销售时代的复杂需求&#xff0c;而连锁店管理系统的库存跟踪功能&#xff0c;正成为解决库存难题、提升客户体验的关键武器。本文将深入解析施易德&#xff08;cegid&…

Nestjs框架: 接口安全与响应脱敏实践 --- 从拦截器到自定义序列化装饰器

接口安全问题&#xff1a;敏感数据脱敏的必要性 在用户注册成功后&#xff0c;若直接将用户数据&#xff08;如密码、ID 等&#xff09;返回给前端&#xff0c;存在严重的安全风险 为此&#xff0c;需要在接口响应前对数据进行脱敏处理 关键点&#xff1a; 敏感字段&#xff…

Python包与虚拟环境工具全景对比:从virtualenv到uv的演进

Python 的开发环境管理一直是综合性的工程问题。随着工具和规范的不断进化&#xff0c;我们看到了从 virtualenv / pip 开始&#xff0c;到 pipenv 和 poetry 的环境一体化&#xff0c;再到 uv 和 hatch 这样的一体化、高性能新生代工具。 本文将对比这些工具的特点、优势和选型…

期货和期权对冲后能盈利吗?

本文主要介绍期货和期权对冲后能盈利吗&#xff1f;期货和期权作为金融衍生品的两大核心工具&#xff0c;其组合对冲策略的盈利性取决于市场走势、策略设计、成本管控及风险对冲效果。对冲的本质是降低风险&#xff0c;但通过合理设计&#xff0c;部分策略可在对冲风险的同时创…

【其他分类】Showrunner AI版的Netflix 互动故事创作平台 进行动画生成与微调、角色场景创建

Showrunner是一个AI 驱动的角色场景动画。视觉风格较为统一&#xff0c;偏向 3D Q 版卡通风格&#xff0c;支持语音对白修改、镜头相机切换、动画角色和场景设置等功能。 论文原文中文翻译官方地址pdf版 、网页版pdf版https://www.showrunner.xyz/ 当前的2D 动画软件&#xff…