题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例一:
1 | 输入: [3,2,1,5,6,4] 和 k = 2 |
示例二:
1 | 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 |
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
题解
方法一:采用快排的partition的思想,因为一趟partition可以确定一个数所在的位置,大于它的放左边,小于它的放右边。partition的过程返回一个确定的位置,然后对比和K的大小,如果小于K,则找前面的值,如果大于K找后面的值。
方法二:采用优先级队列,使用一个最小堆,然后使用java的priorityqueue来实现。
代码
1 | import java.util.PriorityQueue; |