LeetCode: 数组中的第K个最大元素
问题描述
在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。
解题思路
解决这个问题有多种方法,下面是几种常见的解题策略:
- 排序后选择: 将数组排序,然后选择第
len(array) - k位置上的元素。 - 优先队列(最小堆): 使用一个大小为k的最小堆,遍历数组维护堆的大小为k,堆顶即为第k个最大元素。
- 快速选择(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)。
相关文章:
LeetCode: 数组中的第K个最大元素
问题描述 在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。 解题思路 解决这个问题有多种方法,下面是几种常见的解题策略: 排序后选择: 将数组排序,…...
亚马逊自养号测评:如何安全搭建环境,有效规避风险
要在亚马逊上进行自养号测评,构建一个真实的国外环境至关重要。这包括模拟国外的服务器、IP地址、浏览器环境,甚至支付方式,以创建一个完整的国际操作环境。这样的环境能让我们自由注册、养号并下单,确保所有操作均符合国际规范。…...
uniApp 调整小程序 单个/全部界面横屏展示效果
我们打开uni项目 小程序端运行 默认是竖着的一个效果 我们打开项目的 pages.json 给需要横屏的界面 的 style 属性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就横屏了 如果是要所有界面都横屏的话 就直接在pages.json 的 gl…...
【java】18:内部类(2)匿名内部类
(1)本质是类(2)内部类(3)该类没有名字(4)同时还是一个对象 说明:匿名内部类是定义在外部类的局部位置,比如方法中,并且没有类名 1.匿名内部类的…...
c语言之字符串的输入和输出
c语言在输出字符串时,用格式符‘%s",代码比较简洁 如果说数组长度大于字符串长度,也只输出\0前的内容 字符串默认后面有\0. 如果字符串有多个\0,会默认在第一个\0结束 #include<stdio.h> int main() {int i;char a…...
戏说c第二十六篇: 测试完备性衡量(代码覆盖率)
前言 师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。” 我:“怎么说?” 师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的…...
C语言初阶—函数
函数:子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成,它负责完成某项特定任务,而且相较于其他代码,具有相对独立性。一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏&a…...
vue3的router
需求 路由组件一般放在,pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面,再定义一个router-view组件 他的子组件,机会渲染在router-view区域 路由传参 <RouterLink :to"/news…...
云时代【5】—— LXC 与 容器
云时代【5】—— LXC 与 容器 三、LXC(一)基本介绍(二)相关 Linux 指令实战:使用 LXC 操作容器 四、Docker(一)删除、安装、配置(二)镜像仓库1. 分类2. 相关指令…...
npm digital envelope routines::unsupported
问题描述:npm运行命令报错:digital envelope routines::unsupported 原因:node版本过高 解决方案:在运行命令之前加上 SET NODE_OPTIONS--openssl-legacy-provider && SET NODE_OPTIONS--openssl-legacy-provider &&a…...
深入理解Flutter中的StreamSubscription和StreamController
在Flutter中,StreamSubscription和StreamController是处理异步数据流的重要工具。它们提供了一种方便的方式来处理来自异步事件源的数据。本文将深入探讨它们的区别以及在实际应用中的使用场景。 StreamSubscription StreamSubscription代表了对数据流的订阅&…...
聊聊 HTTP 性能优化
作为用户的我们在 "上网冲浪" 的时候总是希望快一点,尤其是抢演唱会门票的时候,但是现实并非如此,有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础,从网站打开速度到移动应用的响应…...
六、防御保护---防火墙内容安全篇
攻击可能只是一个点,防御需要全方面进行 DPI --- 深度包检测技术 --- 主要针对完整的数据包(数据包分片,分段需要重组),之后对 数据包的内容进行识别。(应用层) 1,基于“特征字”的…...
HC32F460 是否有 RTC?在电池供电方案中该如何使用?
[技术问答]HC32F460 是否有 RTC?在电池供电方案中该如何使用?_hc32f460 rtc-CSDN博客 华大HC32A460 系列介绍(三)_华大单片机内部温度传感器-CSDN博客 HC32F460PETB-LQFP100-华大半导体有限公司 [【HC32F460开发板测评】…...
HTML---表单验证
文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…...
基于tomcat的JavaWeb实现
Tomcat服务器 免费,性能一般的服务器 安装配置 基于Java,故需要配置环境变量,新加系统路径JAVA_HOME,路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…...
AI时代编程新宠!如何让孩子成为未来的编程大师?
文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展,编程已经从一种专业技能转变…...
Qt 中Json的构造和解析简单例子
概述: Qt中使用Json比较方便,不像纯C需要导入CJson RapidJson JsonCpp等第三方的库,主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…...
CSS特性
小技巧:在调试工具中,css样式上看层叠,下看继承。 1、层叠性 相同的属性会被覆盖,不同的属性会叠加 2、继承性 3、优先级 基于不同种类的选择器的匹配规则。 通配符 < 标签 < 类选择器 < id选择器 < 行内样式 <…...
springcloud:3.1介绍雪崩和Resilience4j
灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
