题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/questionTerminal/e016ad9b7f0b45048c58a9f27ba618bf
import java.util.*;
public class Solution {
public int findKth(int[] a, int n, int K) {
// write code here
if (a == null || n == 0 || K < 1 || K > n){
return -1;
}
return partition(a, 0, n - 1, n - K);
}
private int partition(int[] a, int start, int end, int K) {
if (start >= end) {
return a[K];
}
int left = start, right = end;
int pivot = a[(start + end) / 2];
while (left <= right) {
while (left <= right && a[left] < pivot) {
left++;
}
while (left <= right && a[right] > pivot) {
right--;
}
if (left <= right) {
swap(a, left, right);
left++;
right--;
}
}
if (K <= right) {
return partition(a, start, right, K);
}
if (K >= left) {
return partition(a, left, end, K);
}
return a[K];
}
private void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
查看16道真题和解析
