题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
public:
int partition(vector<int>& a,int i,int j){
/*
1.k值更新
2.第k大而不是从左往右第k大
*/
int key = a[i];
while(i<j){
while(i<j&&a[j]<=key)
j--;
a[i] = a[j];
while(i<j&&a[i]>key)
i++;
a[j] = a[i];
}
a[i] = key;
return i;
}
int findKth(vector<int> a, int n, int K) {
// write code here
int left=0;
int right=n-1;
int k = partition(a,left, right);
while(1){
if(k==K-1) return a[k];
else if(k<K-1){
k = partition(a, k+1, right);
}else if(k>K-1){
k= partition(a, left, k-1);
}
}
}
};
本来一眼就出了思路,因为注释里的脑残失误,看了一个小时才看出来,简单题掉以轻心,死的最惨!!!!!