第 k 大是把数组从大到小排好后下标为 k 的那个(从 1 开始),重复值各自占一个名次。
值域只有 [−104,104],一共 20001 种,直接计数排序就是 O(n)。
给定一个包含 n 个整数的数组 nums 和一个整数 k,请返回数组中第 k 大的元素。
需要注意的是,第 k 大表示将数组中的所有元素按照从大到小排序后位于第 k 个位置的元素,而不是第 k 个不同的元素。
数组中可能存在重复元素,重复元素需要分别参与排名。
要求设计并实现时间复杂度为 O(n) 的算法解决该问题。
第一行输入两个整数 n 和 k,分别表示数组 nums 的长度以及需要查找的排名。
第二行输入 n 个整数 numsi,表示数组中的各个元素,相邻整数之间用空格分隔。
1≤k≤n≤105
−104≤numsi≤104
输出一个整数,表示数组 nums 中第 k 大的元素。
输入
6 2
3 2 1 5 6 4
输出
5
说明
将数组按照从大到小的顺序排列后为 6,5,4,3,2,1。
其中第 2 大的元素为 5,因此输出 5。
输入
9 4
3 2 3 1 2 4 5 5 6
输出
4
说明
将数组按照从大到小的顺序排列后为 6,5,5,4,3,3,2,2,1。
重复元素需要分别参与排名,因此第 4 大的元素为 4。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册