Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
解法1:PriorityQueue, O(NlogK), Space O(K)
一种解法是很直观的用heap来解决,维护一个大小为k的堆。因为每次insert的操作的时间复杂度是O(logK), 一共要遍历N个元素。
最后取出顶元素即可。
Java
解法2:比较优解 Quick Select, Average O(N), worst O(N^2), Space O(1)
主要是用到了Quick Select中一次partition就可以知道pivot在array中的具体位置,假设是X。
那么如果X == k, 我们要求的就求道了。假设是X < k, 那么我们只需要在右半边找,反之就在左半边找。
要掌握partition函数的写法。
Java