算法通关村——数组中第K大的数字

news2024/11/17 13:45:10

数组中第K大的数字

1、题目描述

​ LeetCode215. 数组中的第K个最大元素。给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。

示例1:

输入:[3, 2, 1, 5, 6, 4] 和 k = 2

输出:5

示例2:

输入:[3, 2, 3, 1, 2, 4, 5, 5, 6] 和 k = 4

输出:4

2、解题思路

​ 本题可以运用快速排序的思路,下图是快排中的一轮排序过程:

789bff53a103bec05106e821168ac257

​ 在一轮的快排结束后,基准元素左侧的元素都是比它小的,右侧的元素都是比它大的,我们可以利用这个特点。具体来说,我们可以知道上图中基准元素在一轮快排后的索引是3,所以递增排序后,这个紫色的方块一定是第四大的元素。如果要找第二大的元素,就一定会去紫色元素右边的橙色元素中找;如果要找第六大的元素,就一定会去紫色原色左边的绿色元素中找,而不需要的那部分就不用管了。

3、代码实现

​ 用java给出本题的代码如下:

public static int quickSelect(int[] nums, int l, int r, int k) {
    if (l == r) return nums[k];
    int x = nums[l], i = l - 1, j = r + 1;
    while(i < j) {
        do i++; while (nums[i] < x);
        do j--; while (nums[j] > x);
        if (i < j) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
    }
    
    if (k <= j) return quickSelect(nums, l, j, k);
    else return quickSelect(nums, j + 1, r, k);
}

public static int findKthLargest(int[] _nums, int k) {
    int n = _nums.length;
    return quickSelect(_nums, 0, n - 1, n - k)
}

​ 为什么findKthLargest中传入quickSelect的是n-k而不是k?

​ 因为题目要求的是找出第k大的元素,如果quickSelect方法中返回的是_nums[k]的话,那返回就是排好序的数组中的第k-1个元素,如果返回的是__nums[n-k]的话,那返回的就是排好序的数组中从右往左的第k个元素,因为是递增序列,所以就是第k大的元素。

​ 例如对数组[3,2,1,5,6,4],返回第2大的元素,在调用quickSelect方法时传入的k参数是n-2=4,那最后在结束快排后,返回的就是一个递增数组的nums[4],即从右往左数的第二个元素,也就是第二大的元素。

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

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

相关文章

五、nacos安装指南

Nacos安装指南 1.Windows安装 开发阶段采用单机安装即可。 1.1.下载安装包 在Nacos的GitHub页面&#xff0c;提供有下载链接&#xff0c;可以下载编译好的Nacos服务端或者源代码&#xff1a; GitHub主页&#xff1a;https://github.com/alibaba/nacos GitHub的Release下载…

【Web 实战】记一次攻防实战

经典开局一个登录框 由于漏洞应该还未修复。对于数据和相关网址打个码见谅一下 常规思路&#xff08;爆破&#xff09; 常规操作进行一波 尝试弱口令然后开始爆破 对于此种有验证码的爆破&#xff0c;可以借用一个bp插件。 captcha-killer-modified-jdk14.jar 具体使用我就…

centos8 执行yum install ntpdate命令,报错未找到匹配的参数: ntpdate

1、执行 yum install ntpdate 报错 上次元数据过期检查&#xff1a;1:17:06 前&#xff0c;执行于 2023年11月15日 星期三 10时32分18秒。 未找到匹配的参数: ntpdate 错误&#xff1a;没有任何匹配: ntpdate 报错截图&#xff1a; 2、CentOS8系统中&#xff0c;原有的时间…

GPT 5也要来了?看看​OpenAI CEO Sam Altman最近的采访

OpenAI CEO Sam Altman 在接受金融时报采访中&#xff0c;透露了更多OpenAI的计划&#xff1a;他们正在寻求从微软获得更多资金支持&#xff0c;以构建真正的通用人工智能&#xff08;AGI&#xff09;。同时还透露了关于GPT 5的一些信息和公司AGI愿景目标&#xff01;他认为&am…

使用order by 排序后的是10 6 7 8 9 而不是 6 7 8 9 10?

问题 sql order by 排序后的为什么 是10 6 7 8 9 而不是 6 7 8 9 10? 思路 在 SQL 中&#xff0c;ORDER BY 默认的排序方式是升序&#xff08;从小到大&#xff09;。所以&#xff0c;如果您简单地使用 ORDER BY 对某个列进行排序&#xff0c;它会将数字按照升序排列&#…

物流接单APP源码 货运APP源码 拉货搬家app源码 货运小程序uniapp+thinkphp

拉货搬家大货车货运物流运输货拉拉货跑腿司机接单物流货运 技术栈 : 后端php7.0版本 框架 thinkphp mysq5.6 前端 uniapp 用户列表 用户分组 实名认证 驾驶证认证 车主认证 搬家拉货 优惠营销 微信管理 评论管理

【仿真】ruckig在线轨迹生成器示例

该场景说明了使用 CoppeliaSim 中提供的 Ruckig 在线轨迹生成功能的各种方法&#xff1a; 1. 在线程脚本内使用单个阻塞函数&#xff08;红色&#xff09; 2. 在线程脚本中使用多个非阻塞函数&#xff08;黄色&#xff09; 3. 在非线程脚本中使用多个非阻塞函数&#xff08;…

url找不到404的问题,url被拼接

今天遇到一个测试feign调用的功能&#xff0c;如图所示 先说结论 Controller换成RestController 将日志设置为debug模式 被DispatcherServlet FORWARD了 找到路径 对属性设置断点&#xff0c;看下是哪注进来的 我们再去找encodedPath 此处是undertow的源码&#xff0c;但是und…

实验室EM3电磁铁

锦正茂EM3电磁铁&#xff0c;可以通过更换电磁铁极头在一定范围内改善磁场的大小和磁场的均匀度 &#xff0c;并且可以通过调整极头间距改变磁场的大小。主要用于磁滞现象研究、磁化系数测量、霍尔效应研究、磁光实验、磁场退火、核磁共振、电子顺磁共振、生物学研究、磁性测量…

ERP和MES对接都有什么方式

万界星空科技MES生产管理系统的应用比较广&#xff0c;在和ERP连接时&#xff0c;必须先掌握什么模块是和MES业务流程有关的。 通过详细介绍ERP和MES对接方式的不同特点、应用场景和操作方法&#xff0c;可帮助企业更好地实现信息集成&#xff0c;提升生产效率和质量&#xff…

excel中用NORM.INV函数计算正态累积分布的逆

NORM.INV函数返回正态累积分布的逆。它的形式为NORM.INV(probability,mean,standard_dev)。 正态累积分布函数和正态概率密度函数互为逆。 参数说明&#xff1a; probability&#xff1a;对应正态分布的累积分布值。例如该值等于0.9&#xff0c;表示累积概率之和是0.9Mean&am…

舞台演出控制软件:QLab Pro

QLab Pro是一款功能强大的现场多媒体控制器软件&#xff0c;专为Mac用户设计。它提供了一个直观简洁的用户界面&#xff0c;使得用户能轻松管理和组织所有的媒体资源。QLab Pro支持导入各种音频和视频文件&#xff0c;并具备强大的音频、视频处理和灯光控制功能&#xff0c;可以…

JAVA 中集合取交集

日常工作 经常需要取两个数据集的交集。对常用的List 和Set集合做了一个测试 public static void main(String[] args) {List<Integer> list1 Lists.newArrayList();List<Integer> list2 Lists.newArrayList();Set<Integer> set3 Sets.newHashSet();Set&l…

自定义windows右键菜单,软件卸载后 右键菜单残留 打开方式残留 解决方法

问题&#xff1a; 更改windows右键菜单软件卸载残留&#xff0c;其仍然出现在文件的打开方式列表&#xff0c;右键菜单中。 解决方法1&#xff1a;推荐使用registry workshop批量搜索删除注册表 绿色版&#xff1a; 蓝奏云&#xff1a;https://wwzd.lanzouw.com/iPJNp1em339…

简易搜索引擎SEWeibo

背景 有一组微博事件数据&#xff0c;之前做了一些数据分析与挖掘的工作。想着用C做一个简单的搜索引擎玩玩。 亮点&#xff1a; 搜索支持关系关键字作为搜索条件&#xff0c;以文本情感极性作为初筛条件&#xff0c;以TF-IDF为搜索排序依据以Reactor模式为基础&#xff0c;…

win10关闭讲述人、粘滞键功能的快捷键启动

简单记录下在win10关闭讲述人、粘滞键快速启动的快捷键&#xff0c;这两个功能对正常人没什么用。误触发很烦。 禁用讲述人 按windows键&#xff0c;输入“轻松使用设置”&#xff0c;点“讲述人”&#xff0c;如下图取消讲述人开关和快捷键的勾选。 禁用粘滞键 按windows…

CSGO游戏搬砖还能做吗?CSGO饰品未来走势如何?

CSGO饰品市场会崩盘吗&#xff1f;CSGO还能做多久&#xff1f; 如何看待CSGO饰品市场的整体走向&#xff1f; 从整体来说&#xff0c;CSGO的饰品市场与规模肯定会持续不断的上升&#xff0c;大盘不会发生特别大的波动&#xff0c;目前处于稳定期&#xff01;&#xff01;&…

什么是数据泄露?泄露途径有哪些?企业如何免遭数据泄露?

数据泄露指将机密信息、私人信息或其他敏感信息发布到不安全的环境中。数据泄露可能由意外引起&#xff0c;也可能是蓄意攻击的结果。 每年都有数百万人卷入数据泄露&#xff0c;包括意外看错病人图表的医生&#xff0c;以及大规模尝试访问政府计算机以发现敏感信息。 因为敏…

一文详解oa人事系统!

一、什么是OA系统 OA系统全称为Office Automation&#xff0c;即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台&#xff0c;具有信息管理、流程管理、知识管理&#xff08;档案和业务管理&#xff09;、协同办公等多种功能。 OA系统可以帮…

vue中bus的详细使用

vue中关于兄弟组件bus的使用方法 首先&#xff0c;bus可以用在任何组件之间的传值 废话不多说&#xff0c;请看下面代码解说 首先&#xff0c;先创建bus.js文件&#xff0c;然后在引用&#xff0c;这里有两种引用方法&#xff1a;局部引用和全局引用。 // bus.js文件内容 imp…