题目地址:
https://leetcode.com/problems/kth-largest-element-in-an-array/
给定一个数组,求它的第
k
k
k大元素(真实定义是从大到小排好序后位于第
k
k
k个的数,或者下标
k
−
1
k-1
k−1的数)。
快速选择算法。代码如下:
class Solution {
public:
int findKthLargest(vector<int>& A, int k) {
int n = A.size();
k = n - k;
return quick_select(A, 0, n - 1, k);
}
int quick_select(vector<int>& A, int l, int r, int k) {
while (l < r) {
int i = l, j = r, piv = A[l + (r - l >> 1)];
while (i <= j) {
while (A[i] < piv) i++;
while (A[j] > piv) j--;
if (i <= j) swap(A[i++], A[j--]);
}
if (k <= j)
r = j;
else if (k >= i)
l = i;
else
break;
}
return A[k];
}
};
平均时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。