(1)没有满足题意,使用优先队列求解
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
// write code here
priority_queue<int, vector<int>, greater<int>> pq;
for(int i=0; i<K; i++){
pq.push(a[i]);
}
for(int i=K; i<n; i++){
if(pq.top() < a[i]){
pq.pop();
pq.push(a[i]);
}
}
int res = pq.top();
return res;
}
};
(2)满足题意,采用类似快速排序思路
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
// write code here
cal(a, 0, n-1, K);
return a[K-1];
}
void cal(vector<int>& a, int left, int right, int k){
if(left > right){
return;
}
int temp = a[left];
int i = left, j = right;
while(i != j){
while(a[j] <= temp && i<j) j--;
while(a[i] >= temp && i<j) i++;
if(i < j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
if(i >= k){
cal(a, left, i-1, k);
}
else{
cal(a, i+1, right, k);
}
}
};