#3802. 练5-谁是第K大
练5-谁是第K大
🏫 兔猫信奥学院 - 谁是第K大?
在风景优美的兔猫信奥学院,又到了一周一次的“算法挑战课”。这节课,加菲老师穿着他标志性的格子毛衣,悠闲地走进教室,对小兔和小猫布置了一个“隐藏实力排名”的谜题。
🐾 加菲老师说:
同学们,我手里有一串神秘的数字列表,也就是你们即将面对的
nums
数组。
你们的任务是,从中找出排序后第 k 个最大的元素!注意啦,是第 k 大,不是第 k 个不同的!
小兔一听,眨着眼睛说:“是不是要排序再找呀?”
加菲老师摇摇头:“不不不,这次不准用内置排序函数哦,要你们自己设计个平均意义下时间复杂度为 O(n) 的方法来找!”
🎯 输入格式
输入包含两行:
- 第一行包含两个正整数
n
和k
,分别表示数组的长度和要求的名次。 - 第二行包含
n
个整数,表示数组nums
的元素。
📝 输出格式
输出一个整数,表示数组排序后第 k
个最大的元素。
🎲 输入样例
样例1:
6 2
3 2 1 5 6 4
输出1:
5
说明:
排序后的数组是 ([1, 2, 3, 4, 5, 6]),第 2 个最大的数就是 5。
样例2:
9 4
3 2 3 1 2 4 5 5 6
输出2:
4
说明:
排序后是 ([1, 2, 2, 3, 3, 4, 5, 5, 6]),第 4 个最大的元素是 4。
📏 数据范围
- (1 \le k \le n \le 10^5)
- (-10^4 \le \text{nums}[i] \le 10^4)
🧠 加菲老师温馨提示:
快速选择(Quickselect)是你们的好朋友哦,记得它的平均时间复杂度可是 (O(n)),比排序快很多呢!
于是,小兔和小猫摩拳擦掌,准备写下高效的代码,赢得这场挑战,你也快来试试吧!🐇🐱💻✨