LeetCode: 数组中的第K个最大元素

问题描述

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

解题思路

解决这个问题有多种方法,下面是几种常见的解题策略:

  1. 排序后选择: 将数组排序,然后选择第len(array) - k位置上的元素。
  2. 优先队列(最小堆): 使用一个大小为k的最小堆,遍历数组维护堆的大小为k,堆顶即为第k个最大元素。
  3. 快速选择(QuickSelect): 快速选择算法是快速排序的变体,用于找到未排序数组中第k个最大的元素。
代码示例
排序后选择
class Solution:def findKthLargest(self, nums, k):nums.sort()return nums[-k]

这种方法的时间复杂度为O(NlogN),空间复杂度为O(1)(如果使用的是原地排序算法)。

优先队列(最小堆)
import heapqclass Solution:def findKthLargest(self, nums, k):heap = []for num in nums:heapq.heappush(heap, num)if len(heap) > k:heapq.heappop(heap)return heap[0]

这种方法的时间复杂度为O(NlogK),空间复杂度为O(K)。

快速选择(QuickSelect)
class Solution:def findKthLargest(self, nums, k):k = len(nums) - kdef quickselect(l, r):pivot, p = nums[r], lfor i in range(l, r):if nums[i] <= pivot:nums[p], nums[i] = nums[i], nums[p]p += 1nums[p], nums[r] = nums[r], nums[p]if p > k: return quickselect(l, p - 1)if p < k: return quickselect(p + 1, r)return nums[p]return quickselect(0, len(nums) - 1)
int partition(vector<int>& nums,int left,int right)
{int key = nums[left];while(left < right){while(left < right and nums[right] >= key ){right--;}nums[left] = nums[right]while(left < right and nums[left] <= key ){left++;}nums[right] = nums[left]}nums[left] = key; return left;  }int findk(vector<int>& nums)
{random_shuffle(nums.begin(),nums.end());int n = nums.size();int left = 0,rihgt = n-1;while(True){int p = partition(nums,left,right);if(p == n-k){return nums[p];}else if(p > n-k){right = p-1;}else{left = p +1;}}return -1;
}

 

快速选择的平均时间复杂度为O(N),最坏情况下的时间复杂度为O(N^2),空间复杂度为O(1)。

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

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

相关文章

ProChat 如何接入 WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;允许客户端和服务器之间进行双向实时通信。与Server-Sent Events (SSE)类似&#xff0c;WebSocket也能实现实时数据推送&#xff0c;但其功能更为强大且灵活。 全双工通信&#xff1a;WebSocket不仅允许服务器向…

【TestNG】(4) 重试机制与监听器的使用

在UI自动化测试用例执行过程中&#xff0c;经常会有很多不确定的因素导致用例执行失败&#xff0c;比如网络原因、环境问题等&#xff0c;所以我们有必要引入重试机制&#xff08;失败重跑&#xff09;&#xff0c;来提高测试用例成功率。 在不写代码的情况没有提供可配置方式…

Mysql 慢查询日志

查询是否开启慢SQL日志 show variables like %slow_query_log; 开启慢查询日志 set global slow_query_logON; 可以通过修改MySQL的配置my.cfg或者my.ini永久生效 slow_query_logON # 开启慢查询日志开关 slow_query_log_file/var/lib/mysql/alvin-slow.log # 慢查询日志…

1.2 在卷积神经网络中,如何计算各层感受野的大小

1.2 在卷积神经网络中&#xff0c;如何计算各层感受野的大小 分析与解答&#xff1a; 在卷积神经网络中&#xff0c;由于卷积的局部连接性&#xff0c;输出特征图上的每个节点的取值&#xff0c;是由卷积核在输入特征图对应位置的局部区域内进行卷积而得到的&#xff0c;因此这…

COM - IWbemClassObject对象属性的遍历

文章目录 COM - IWbemClassObject对象属性的遍历概述笔记场景封装好的函数bool CWmiBase::enumObjVaule(IWbemClassObject* obj, std::wstring& val)bool CWmiBase::appendVarToString(BSTR& strName, VARIANT& var, std::wstring& val)bool CWmiBase::get_var…

【笔试强训错题选择题】Day5.习题(错题)解析

文章目录 前言 错题题目 错题解析 总结 前言 错题题目 1. ​ ​ 2. 3. ​ 4. ​ 5. ​ 错题解析 1. 移位运算符的使用 2. 3. 4. 5. 总结

如何用TCC实现分布式事务?

TCC事务介绍 TCC&#xff08;Try-Confirm-Cancel&#xff09;是除可靠消息队列以外的另一种常见的分布式事务机制&#xff0c;它是由数据库专家帕特 赫兰德&#xff08;Pat Helland&#xff09;在2007年撰写的论文《Life beyond Distributed Transactions: An Apostate’s Op…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发和研究体育赛事目标检测系统对于增强体育分析和观赏体验至关重要。本篇博客详细讲述了如何运用深度学习技术构建一个体育赛事目标检测系统&#xff0c;并提供了完整的实现代码。系统基于先进的YOLOv8算法&#xff0c;对比了YOLOv7、YOLOv6、YOLOv5的性能&a…

【webrtc】p2p_transport_channel 中忽略Hyper-V

【win11】更改网络适配器设置 删掉了hype-v,这时候wsl2 打不开了,但是重启后,还是存在hyper-v那么,让webrtc自己不适用hyper-v的网络Hyper-V 的全程:Hyper-V Virtual Ethernet Adapter https://github.com/SophistSolutions/Stroika/blob/2cd5e8bf4ee01cb5c423367b4df628f…

MFC 模态对话框退出机制的探究

一位读者问了这样一个问题: ” 如果我创建了一个可见的模态对话框,却对用户来说不可用。举个例子,假设我在程序中的其他位置收到一个事件,并且我从事件中调用模态 CDialog 上的 DestroyWindow。我注意到 OnDestroy 是在 CDialog 上调用的,但在将 WM_QUIT 消息发送到模态对…

在MyBatis中自定义JsonTypeHandler

在MyBatis中使用自定义的JsonTypeHandler 在处理数据库中的JSON字段时&#xff0c;我们经常需要将JSON字符串映射到Java对象&#xff0c;或者将Java对象序列化为JSON字符串以存储在数据库中。MyBatis作为一个流行的Java持久层框架&#xff0c;允许我们通过自定义类型处理器&am…

爬虫入门到精通_实战篇7(Requests+正则表达式爬取猫眼电影)_ 抓取单页内容,正则表达式分析,保存至文件,开启循环及多线程

1 目标 猫眼榜单TOP100&#xff1a;https://www.maoyan.com/board 2 流程框架 抓取单页内容&#xff1a;利用requests请求目标站点&#xff0c;得到单个网页HTML代码&#xff0c;返回结果。正则表达式分析&#xff1a;根据HTML代码分析得到电影名称,主演,上映时间,评分,图片…

跨域问题与解决方法

跨域问题与解决方法 同源策略 浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议域名端口"三者相同&#xff0c;即便两个不同的域名指向同一个ip地址&#xff0c;也非同源。 同源策略限制以下几种行为&#xff1a; Cookie、LocalStorage 和 IndexDB 无法读取 DO…

C语言中的分支和循环语句:从入门到精通

分支和循环语句 1. 前言2. 预备知识2.1 getchar函数2.2 putchar函数2.3 计算数组的元素个数2.4 清屏2.5 程序的暂停2.6 字符串的比较 3. 结构化3.1 顺序结构3.2 分支结构3.3 循环结构 4. 真假性5. 分支语句&#xff08;选择结构&#xff09;5.1 if语句5.1.1 语法形式5.1.2 else…

Java网络通信UDP

目录 网络通信基础 UDP通信 服务器 1.想要使用UDP通信 要先打开DatagramSocket文件 端口号可以手动指定或系统随机分配 2.阻塞等待接收客户端数据&#xff1b;创建DatagramPacket接收客户端传来的数据 3.处理客户端传来的数据&#xff0c;并进行业务处理&#xff08;这里…

MySQL 教程 2.4

MySQL UNION 操作符 本教程为大家介绍 MySQL UNION 操作符的语法和实例。 描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合&#xff0c;并去除重复的行。 UNION 操作符必须由两个或多个 SELECT 语句组成&#xff0c;每个 SELECT 语句的列数…

Python降维数据库之umap使用详解

概要 在数据科学和机器学习领域,数据通常是高维度的,而高维度数据不仅难以可视化,还会增加建模的复杂性。降维是一种处理高维数据的关键技术,而Python UMAP(Uniform Manifold Approximation and Projection)是一种强大的降维工具,它在保留数据结构的同时,将高维数据映…

uni-app引用外部js文件

全局引用 在App.vue文件中添加如下代码 这样在全局所有页面中都可以直接使用该外部js中的函数 onLaunch: function() {var script document.createElement(script);script.src "https://www.test.com/api/testapi.js";document.body.appendChild(script); }, 单…

【IDEA+通义灵码插件】实现属于你的大模型编程助手

目录 1.前言 2.下载安装 3.解释代码 4.生成单元测试 5.生成注释 6.智能补全 1.前言 大模型到底该以一种什么方式落地&#xff0c;从而嵌入我们的工作当中&#xff0c;助力我们工作效率的提升&#xff0c;其实最好的方式也许就是虚拟助手的方式&#xff0c;就像钢铁侠的&…

【OpenCV基础(三)】Ubuntu系统下EasyPR环境配置

环境配置 1、资源下载2、环境配置2.1、1、将EasyPR压缩包拷贝到Ubuntu 三种方法任选一种2.2、解压得到EasyPR文件夹(文件夹一层进入后EasyPR资源内容)2.3、终端命令修改权限**chmod -R 777 ./ EasyPR**2.4、查找EasyPR/include/easypr/config.h&#xff0c;使用gedit方式打开2.…