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

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)。

相关文章:

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

问题描述 在未排序的数组中找到第k个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第k个最大的元素&#xff0c;而不是第k个不同的元素。 解题思路 解决这个问题有多种方法&#xff0c;下面是几种常见的解题策略&#xff1a; 排序后选择: 将数组排序&#xff0c…...

亚马逊自养号测评:如何安全搭建环境,有效规避风险

要在亚马逊上进行自养号测评&#xff0c;构建一个真实的国外环境至关重要。这包括模拟国外的服务器、IP地址、浏览器环境&#xff0c;甚至支付方式&#xff0c;以创建一个完整的国际操作环境。这样的环境能让我们自由注册、养号并下单&#xff0c;确保所有操作均符合国际规范。…...

uniApp 调整小程序 单个/全部界面横屏展示效果

我们打开uni项目 小程序端运行 默认是竖着的一个效果 我们打开项目的 pages.json 给需要横屏的界面 的 style 属性 加上 "mp-weixin": {"pageOrientation": "landscape" }界面就横屏了 如果是要所有界面都横屏的话 就直接在pages.json 的 gl…...

【java】18:内部类(2)匿名内部类

&#xff08;1&#xff09;本质是类&#xff08;2&#xff09;内部类&#xff08;3&#xff09;该类没有名字&#xff08;4&#xff09;同时还是一个对象 说明&#xff1a;匿名内部类是定义在外部类的局部位置&#xff0c;比如方法中&#xff0c;并且没有类名 1.匿名内部类的…...

c语言之字符串的输入和输出

c语言在输出字符串时&#xff0c;用格式符‘%s"&#xff0c;代码比较简洁 如果说数组长度大于字符串长度&#xff0c;也只输出\0前的内容 字符串默认后面有\0. 如果字符串有多个\0&#xff0c;会默认在第一个\0结束 #include<stdio.h> int main() {int i;char a…...

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟&#xff1a;“师兄&#xff0c;我又被鄙视了。说我的系统太差&#xff0c;测试不过关。” 我&#xff1a;“怎么说&#xff1f;” 师弟&#xff1a;“每次发布版本给程夏&#xff0c;都被她发现一些bug&#xff0c;太丢人了。师兄&#xff0c;有什么方法来衡量测试的…...

C语言初阶—函数

函数&#xff1a;子程序&#xff0c;是一个大型程序中的某部分代码&#xff0c;由一个或多个语句块组成&#xff0c;它负责完成某项特定任务&#xff0c;而且相较于其他代码&#xff0c;具有相对独立性。一般会有输入参数并有返回值&#xff0c;提供对过程的封装和细节的隐藏&a…...

vue3的router

需求 路由组件一般放在&#xff0c;pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面&#xff0c;再定义一个router-view组件 他的子组件&#xff0c;机会渲染在router-view区域 路由传参 <RouterLink :to"/news…...

云时代【5】—— LXC 与 容器

云时代【5】—— LXC 与 容器 三、LXC&#xff08;一&#xff09;基本介绍&#xff08;二&#xff09;相关 Linux 指令实战&#xff1a;使用 LXC 操作容器 四、Docker&#xff08;一&#xff09;删除、安装、配置&#xff08;二&#xff09;镜像仓库1. 分类2. 相关指令&#xf…...

npm digital envelope routines::unsupported

问题描述&#xff1a;npm运行命令报错&#xff1a;digital envelope routines::unsupported 原因&#xff1a;node版本过高 解决方案&#xff1a;在运行命令之前加上 SET NODE_OPTIONS--openssl-legacy-provider && SET NODE_OPTIONS--openssl-legacy-provider &&a…...

深入理解Flutter中的StreamSubscription和StreamController

在Flutter中&#xff0c;StreamSubscription和StreamController是处理异步数据流的重要工具。它们提供了一种方便的方式来处理来自异步事件源的数据。本文将深入探讨它们的区别以及在实际应用中的使用场景。 StreamSubscription StreamSubscription代表了对数据流的订阅&…...

聊聊 HTTP 性能优化

作为用户的我们在 "上网冲浪" 的时候总是希望快一点&#xff0c;尤其是抢演唱会门票的时候&#xff0c;但是现实并非如此&#xff0c;有时候我们会遇到页面加载缓慢、响应延迟的情况。 而 HTTP 协议作为互联网世界的基础&#xff0c;从网站打开速度到移动应用的响应…...

六、防御保护---防火墙内容安全篇

攻击可能只是一个点&#xff0c;防御需要全方面进行 DPI --- 深度包检测技术 --- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行识别。&#xff08;应用层&#xff09; 1&#xff0c;基于“特征字”的…...

HC32F460 是否有 RTC?在电池供电方案中该如何使用?

[技术问答]HC32F460 是否有 RTC&#xff1f;在电池供电方案中该如何使用&#xff1f;_hc32f460 rtc-CSDN博客 华大HC32A460 系列介绍&#xff08;三&#xff09;_华大单片机内部温度传感器-CSDN博客 HC32F460PETB-LQFP100-华大半导体有限公司 [【HC32F460开发板测评】&#xf…...

HTML---表单验证

文章目录 目录 本章目标 一.表单验证概述 二.表单选择器 属性过滤选择器 三.表单验证 表单验证的方法 总结 本章目标 掌握String对象的用法会使用表单选择器的选择页面元素会使用JQuery事件进行表单验证Ajax的概念和作用 一.表单验证概述 前端中的表单验证是在用户提交表…...

基于tomcat的JavaWeb实现

Tomcat服务器 免费&#xff0c;性能一般的服务器 安装配置 基于Java&#xff0c;故需要配置环境变量&#xff0c;新加系统路径JAVA_HOME&#xff0c;路径为jdk的主目录。 而后打开bin目录下的startup.bat文件出现如下窗口说明配置成功 idea继承tomcat服务器 使用java开发…...

AI时代编程新宠!如何让孩子成为未来的编程大师?

文章目录 一、了解编程的基础概念二、选择适合的编程工具三、激发孩子的兴趣四、注重基础能力的培养五、提供实践机会六、鼓励孩子与他人合作七、持续支持与鼓励《信息学奥赛一本通关》本书定位内容简介作者简介目录 随着科技的迅猛发展&#xff0c;编程已经从一种专业技能转变…...

Qt 中Json的构造和解析简单例子

概述: Qt中使用Json比较方便&#xff0c;不像纯C需要导入CJson RapidJson JsonCpp等第三方的库&#xff0c;主要使用到QJsonDocument、QJsonObject对象即可 1、如何构造一个json字符串 假如我们需要构造 {"cmd":"1001","data":{"content&q…...

CSS特性

小技巧&#xff1a;在调试工具中&#xff0c;css样式上看层叠&#xff0c;下看继承。 1、层叠性 相同的属性会被覆盖&#xff0c;不同的属性会叠加 2、继承性 3、优先级 基于不同种类的选择器的匹配规则。 通配符 < 标签 < 类选择器 < id选择器 < 行内样式 <…...

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…...

WaveTools鸣潮工具箱:游戏性能优化与账号管理的终极解决方案

WaveTools鸣潮工具箱&#xff1a;游戏性能优化与账号管理的终极解决方案 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》PC版的帧率限制而烦恼吗&#xff1f;或者因为管理多个游戏账号而手忙…...

Dify 1.3.1离线部署保姆级教程:手把手解决Docker镜像拉取失败问题

Dify 1.3.1离线部署全攻略&#xff1a;从镜像获取到故障排查的完整解决方案 在当今AI应用开发领域&#xff0c;Dify作为一款开源的LLM应用程序开发平台&#xff0c;正受到越来越多开发者的青睐。然而&#xff0c;在实际部署过程中&#xff0c;网络环境限制往往成为阻碍开发者快…...

像素剧本圣殿效果实测:Glitch动态标题触发下AI生成的高节奏对白片段

像素剧本圣殿效果实测&#xff1a;Glitch动态标题触发下AI生成的高节奏对白片段 1. 项目概览&#xff1a;当AI编剧遇上8-Bit美学 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款专为影视创作者设计的AI辅助工具&#xff0c;它基于Qwen2.5-14B-Instruct大模型…...

EVA-01部署避坑指南:环境配置、模型下载、常见问题一站式解决

EVA-01部署避坑指南&#xff1a;环境配置、模型下载、常见问题一站式解决 1. 引言&#xff1a;从零启动你的初号机 想象一下&#xff0c;你拿到了一台EVA初号机的启动钥匙&#xff0c;但面对复杂的神经连接接口和陌生的操作面板&#xff0c;却不知从何下手。别担心&#xff0…...

终极指南:如何让Mac外接鼠标获得触控板般丝滑滚动体验

终极指南&#xff1a;如何让Mac外接鼠标获得触控板般丝滑滚动体验 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently f…...

PyTorch 2.8镜像部署教程:支持screen后台运行与日志管理的稳定服务配置

PyTorch 2.8镜像部署教程&#xff1a;支持screen后台运行与日志管理的稳定服务配置 1. 镜像概述与环境准备 PyTorch 2.8深度学习镜像基于RTX 4090D 24GB显卡和CUDA 12.4深度优化&#xff0c;专为高性能计算任务设计。这个预配置环境消除了复杂的依赖安装过程&#xff0c;让开…...

Windows 11系统臃肿不堪?用Win11Debloat一键瘦身优化指南

Windows 11系统臃肿不堪&#xff1f;用Win11Debloat一键瘦身优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

MedGemma 1.5入门必看:4步搭建私有化医疗问答系统(无需联网)

MedGemma 1.5入门必看&#xff1a;4步搭建私有化医疗问答系统&#xff08;无需联网&#xff09; 你是不是也遇到过这样的困扰&#xff1f;想在网上查点医学知识&#xff0c;要么信息太零散&#xff0c;要么广告满天飞&#xff0c;想找个靠谱的AI问问&#xff0c;又担心自己的健…...

GLM-4.1V-9B-Bate后端开发实战:构建高并发图像处理任务队列

GLM-4.1V-9B-Bate后端开发实战&#xff1a;构建高并发图像处理任务队列 1. 为什么需要异步任务队列 电商平台每天要处理数百万张商品图片的智能分析请求&#xff0c;传统同步接口直接返回结果的方式已经无法满足需求。当用户上传一张图片等待AI分析时&#xff0c;如果采用同步…...

别再怕训练ReID了!用PyTorch把DeepSORT特征提取当成分类任务来训(Market-1501数据集实战)

用PyTorch简化DeepSORT特征提取训练&#xff1a;Market-1501实战指南 第一次接触DeepSORT时&#xff0c;我被那些复杂的特征提取网络训练流程吓到了——直到我发现了一个惊人的事实&#xff1a;ReID训练本质上就是一个标准的图像分类任务。本文将带你用最熟悉的PyTorch分类训练…...