#3802. 练5-谁是第K大

练5-谁是第K大

🏫 兔猫信奥学院 - 谁是第K大?

在风景优美的兔猫信奥学院,又到了一周一次的“算法挑战课”。这节课,加菲老师穿着他标志性的格子毛衣,悠闲地走进教室,对小兔小猫布置了一个“隐藏实力排名”的谜题。


🐾 加菲老师说:

同学们,我手里有一串神秘的数字列表,也就是你们即将面对的 nums 数组。
你们的任务是,从中找出排序后第 k 个最大的元素!注意啦,是第 k 大,不是第 k 个不同的!

小兔一听,眨着眼睛说:“是不是要排序再找呀?”

加菲老师摇摇头:“不不不,这次不准用内置排序函数哦,要你们自己设计个平均意义下时间复杂度为 O(n) 的方法来找!”


🎯 输入格式

输入包含两行:

  • 第一行包含两个正整数 nk,分别表示数组的长度和要求的名次。
  • 第二行包含 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)),比排序快很多呢!


于是,小兔和小猫摩拳擦掌,准备写下高效的代码,赢得这场挑战,你也快来试试吧!🐇🐱💻✨