题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
找到第K大的数,也就是找到数组排序后位于n-K位置的数,利用快排的partation函数,可以得到一个数的位置index。如果index == n-k,则返回,如果小于index 则在做边区间去找,如果大于则在右半区间找。
import java.util.*;
public class Solution {
public int findKth(int[] a, int n, int K) {
int i = 0, j = n - 1, t = n - K;
while(i < j){
int index = partation(a, i, j);
if(index == t){
return a[index];
}
if(index > t){
j = index - 1;
}else {
i = index + 1;
}
}
return a[i];
}
int partation(int[] arr, int left, int right){
int temp = arr[left];
while(left < right) {
while(left < right && arr[right] >= temp){
right --;
}
arr[left] = arr[right];
while(left < right && arr[left] < temp){
left ++;
}
arr[right] = arr[left];
}
arr[left] = temp;
return left;
}
}