题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf
快排每次可以确定最终有序序列的一个位置i,若改位置就是要找到第K大,则返回,若改数小于第K大,处理右边,否则,处理左边。size - i就是第(size - i)大的数。
class Solution {
public:
int idx;
int size;
int findKth(vector<int> a, int n, int K) {
// write code here
idx = K;
size = n;
return qsort(a,0,n-1);
}
int qsort(vector<int> &arr,int left,int right){
int i = left,j = right;
int base = arr[left];
while (i < j) {
while (arr[j] >= base && i <j) j--;
while(arr[i] <= base && i < j) i++;
if (i < j){
swap(arr[i],arr[j]);
}
}
swap(arr[left],arr[i]);
//此时已确定排序中第i大的数
if (size - i == idx) {
return arr[i];
}else if(size- i < idx){
return qsort(arr, left, i - 1);//处理左边
}else{
return qsort(arr, i+1, right);//处理右边
}
}
};
