leetcode热题100.数组中的第k大的元素

作者:晓宜
🌈🌈🌈
个人简介:互联网大厂Java准入职,阿里云专家博主,csdn后端优质创作者,算法爱好者
❤️❤️❤️
你的关注是我前进的动力😊
🌙🌙🌙
今天给大家带来 数组中的第k大的元素 这个题,这道题主要有两种解法,一种是快速排序,一种是堆,这道题也是美团面试的时候面试官让我手撕过的,可惜没能解决,希望对大家有帮助

Problem: 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

思路

我们先把题目做一下转化,求解数组第k大的数,其实就是求解第n-k小的数,根据这一性质,我们可以在函数中直接传入n-k

首先,我们可以利用分支的思想解决这个问题,具体思路类似快速排序

我们在一次递归中选定最左边的元素,确定他在数组中的位置,如果 j 的位置小等于n-k,说明n-k在j的左边,所以我们就递归查找[l,j]区间,否则n-k就在j的右边我们查找(l,n-1]这个区间。

我们递归的出口是i==j,此时区间只有一个数,就是我们最终的答案

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:def find(nums,l,r,k):if l==r : return nums[l]x = nums[l]i,j = l-1,r+1while i<j:i+=1while nums[i]<x:i+=1j-=1while nums[j]>x:j-=1if i<j:nums[i],nums[j] = nums[j],nums[i]if k<=j:return find(nums,l,j,k)else:return find(nums,j+1,r,k)n = len(nums)return find(nums,0,n-1,n-k)

我们再考虑一种堆的解法,可以构造一个最大堆,如果堆的数据量大于n,我们就弹出堆元素,这样的话就可以保证堆中元素是最大的n个‘
最后返回堆顶即可

class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:q = []n = len(nums)for x in nums:heappush(q,-x)if len(q)>n-k+1:heappop(q)# print(q)return -q[0]

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

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

相关文章

谷歌浏览器必用AI插件 - elmo,好用,还免费

功能&#xff1a; 1、即时生成网站内容摘要&#xff1b; 2、支持提问并从页面获得直接回答&#xff1b; 3、通过关键词获取相关信息&#xff1b; 4、可以与 PDF 对话&#xff0c;方便理解大型文档、学习或审阅报告&#xff1b; 5、与 YouTube 视频交互问答&#xff08;测试…

探索前端架构:MVC、MVVM和MVP模式

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

C语言常用语法提要

为读者查阅方便,下面列出C语言语法中常用的一些部分的提要。为便于理解没有采用严格的语法定义形式,只是备忘性质&#xff0c;供参考。 1.标识符 可由字母、数字和下划线组成。标识符必须以字母或下划线开头。大、小写的字母分别认为是两个不同的字符。不同的系统对标识符的字…

sky06笔记下

1.边沿检测 检测输入信号din的上升沿&#xff0c;并输出pulse module edge_check ( clk, rstn, din, pulse ); input wire clk,rstn; input wire din; output reg pulse;wire din_dly;always (posedge clk or negedge rstn)beginif(!rstn)din_dly < 1b0;elsedin_dly < d…

307k star, 免费的编程书籍 free-programming-books

307k star, 免费的编程书籍 free-programming-books 分类 开源分享 项目名: free-programming-books -- 各种编程语言免费学习资源 Github 开源地址&#xff1a; https://github.com/EbookFoundation/free-programming-books 查找页面&#xff08;英文&#xff09;&#xff…

补代码随想录算法训练营第43天 |1049. 最后一块石头的重量 II、 494. 目标和、 474.一和零

今天的题目有点抽象&#xff0c;得好好理解 1049. 最后一块石头的重量 II 本题就和 昨天的 416. 分割等和子集 很像了&#xff0c;可以尝试先自己思考做一做。 视频讲解&#xff1a;动态规划之背包问题&#xff0c;这个背包最多能装多少&#xff1f;LeetCode&#xff1a;1049…

tigramite教程(七)使用TIGRAMITE 进行条件独立性测试

文章目录 概述1 连续数值变量1.1 ParCorr 偏相关&#xff08;ParCorr类&#xff09;1.2 鲁棒偏相关&#xff08;RobustParCorr&#xff09;非线性检验1.3 GPDC1.4 CMIknn 2a. 分类/符号时间序列2b. 混合分类/连续时间序列多变量X和Y的测试 概述 这个表格概述了 X ⊥ Y ∣ Z X\…

c语言文件操作(超详细)

前言 这次的博客&#xff0c;可以让大家快速掌握文件操作&#xff0c;方便大家快速找到不懂的内容 文件操作的作用以及基础 1. 为什么使用文件&#xff1f; 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&…

计算机笔记(3)续20个

41.WWW浏览器和Web服务器都遵循http协议 42.NTSC制式30帧/s 44.三种制式电视&#xff1a;NTSC&#xff0c;PAL&#xff0c;SECAM 45.IP&#xff0c;子网掩码白话文简述&#xff1a; A类地址&#xff1a;取值范围0-127&#xff08;四段数字&#xff08;127.0.0.0&#xff09…

第十三届蓝桥杯大赛软件赛省赛CC++大学B组

第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组1、九进制转十进制2、顺子日期3、刷题统计4、修建灌木5、x进制减法6、统计子矩阵7、积木画8、扫雷9、李白打酒加强版10、砍竹子 1、九进制转十进制 计算器计算即可。2999292。 2、…

Spoon Taking Problem(c++题解)

题目描述 &#xfffd;N 人が円卓に座っており&#xff0c;各人は反時計回りに順に 1, …, &#xfffd;1, …, N と番号付けられています&#xff0e;各人はそれぞれ左右どちらか一方の利き手を持っています&#xff0e; 円卓上には 1, …, &#xfffd;1, …, N と番号付け…

【蓝桥杯第十一届省赛B】(部分详解)

门牌制作 #include <iostream> using namespace std; int main() { int cnt0;for(int i1;i<2020;i){if(i%102)cnt;if(i/10%102)cnt;if(i/100%102)cnt;if(i/10002)cnt;}cout<<cnt;// 请在此输入您的代码return 0; }蛇形填数 #include<iostream> using …

开机自启动

对win10,给一种开机自启动的设置方法: 1. winr 打开 2. 输入shell:startup打开 开始\程序\启动 3. 把想要自启动的应用的快捷方式放在这里即可 亲测有用

2024年计算机学科夏令营预推免信息最全汇总(包括计算机本学科和交叉学科)

我在看到新的夏令营信息后会及时更新其中这个表格&#xff0c;表格已经存放在百度网盘中了&#xff0c;下面是一张截图&#xff1a; 下面是存放表格的百度网盘地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1damn4jnG8r-XPe0HhvBRbw?pwd9b0h 提取码&#xff1a;9…

【JavaWeb】百度地图API SDK导入

百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com) 登录注册&#xff0c;创建应用&#xff0c;获取AK 地理编码 | 百度地图API SDK (baidu.com) 需要的接口一&#xff1a;获取店铺/用户 所在地址的经纬度坐标 轻量级路线规划 | 百度地图API SDK (baidu.com) 需要的…

使用 Slurm 配置 Nvidia GPU 集群

记录下使用 slurm 搭建 gpu 集群的过程&#xff0c;以下命令都是用 root 用户执行&#xff0c;切记。 安装 编译 munge wget https://github.com/dun/munge/releases/download/munge-0.5.15/munge-0.5.15.tar.xz tar xvf munge-0.5.15.tar.xz cd munge-0.5.15 ./configure -…

计算机导论Lesson0——认识函数的基本原理

学习资料&#xff1a;https://www.bilibili.com/video/BV1HW4y1A7Yi?p2&vd_sourced6b1de7f052664abab680fc242ef9bc1 为什么计算机里计数从0开始&#xff1f;——0代表位置&#xff0c;而不是个数 我们希望从个位开始计数&#xff0c;即代表的是1&#xff08;从右至左&…

MySQL-SQL编写练习:基本的SELECT语句

基本的SELECT语句 1. SQL的分类 DDL:数据定义语言。CREATE \ ALTER \ DROP \ RENAME \ TRUNCATEDML:数据操作语言。INSERT \ DELETE \ UPDATE \ SELECT &#xff08;重中之重&#xff09;DCL:数据控制语言。COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE 学习技巧&#xf…

【测试篇】测试用例

文章目录 前言具体设计测试用例等价类边界值场景设计法判定表&#xff08;因果图&#xff09;正交排列&#xff08;用的非常少&#xff09;错误猜测法 前言 什么是测试用例&#xff1f;&#xff1f; 测试用例是针对软件系统或应用程序的特定功能或场景编写的一组步骤&#xf…

cookie/session/token三者区别和优缺点

cookie/session/token三者区别和优缺点 cookiesessiontoken三者对比 cookie cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以kv形式保存到某个目录下的文本文件内&#xff0c;下一次请求同一网站时会把该cookie发送给服务器。所以cookie是保存在浏览…