145 - 215 数组中第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
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
解答
Runtime: 76 ms, faster than 46.68% of JavaScript online submissions for Kth Largest Element in an Array.
Memory Usage: 35.9 MB, less than 10.00% of JavaScript online submissions for Kth Largest Element in an Array.
当然这样是不行的哈哈😂
小顶堆
就维护k个数的小顶堆,最后输出堆顶即可
堆就是一个完全二叉树,小顶堆就是堆顶是最小值
Runtime: 64 ms, faster than 97.38% of Python3 online submissions for Kth Largest Element in an Array.
Memory Usage: 13.5 MB, less than 100.00% of Python3 online submissions for Kth Largest Element in an Array.
用数组代替小顶堆
插入用二分法
Runtime: 588 ms, faster than 17.89% of Python3 online submissions for Kth Largest Element in an Array.
Memory Usage: 13.4 MB, less than 100.00% of Python3 online submissions for Kth Largest Element in an Array.
快速选择
随机选一个枢轴pivot,左边的数都比他小,右边的数都比他大。
然后比较比他大的有多少个
Runtime: 52 ms, faster than 99.95% of Python3 online submissions for Kth Largest Element in an Array.
Memory Usage: 13.5 MB, less than 100.00% of Python3 online submissions for Kth Largest Element in an Array.
这个方法好像不是原地算法,毕竟新建了数组。。
就是遇到小的就交换一下两者
Runtime: 76 ms, faster than 76.71% of Python3 online submissions for Kth Largest Element in an Array.
Memory Usage: 13.5 MB, less than 90.00% of Python3 online submissions for Kth Largest Element in an Array.
反而更慢了。。
Last updated
Was this helpful?