思路
快排的思想,partition函数的使用。
如果返回的pivot>n-K,那么right = pivot-1
如果返回的pivot<n-K,那么left = pivot+1
进行新一轮的partition,直到pivot = n-K
代码
class Solution {
public:
int partation(vector<int>& a, int L, int R){
int left = L;
int right = R;
int key = a[left];
while(left<right){
while(left< right && a[right]>=key){
right--;
}
a[left] = a[right];
while(left< right && a[left]<=key){
left++;
}
a[right] = a[left];
}
a[left] = key;
return left;
}
int findKth(vector<int> a, int n, int K) {
// write code here
int left = 0;
int right = n-1;
while(1){
int part = partation(a, left, right);
if(part==n-K){
return a[n-K];
}
else if(part>n-K){
right = part-1;
}
else{
left = part+1;
}
}
return -1;
}
}; 
京公网安备 11010502036488号