主要思想是:首先对目标数组进行快排,然后创建一个临时变量,通过遍历获得第K大的数,下面是具体代码。
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* Description:
* User: Y
* Date: 2019-06-30
* Time: 21:45
*/
public class Finder {
public static void quickSort(int[] array, int start, int end) {
if (start >= end) {
return;
}
int tmp = array[start];
int low = start;
int high = end;
while (low < high) {
while (low < high && array[high] >= tmp) { //
high -= 1;
}
array[low] = array[high];
while (low < high && array[low] < tmp) {
low += 1;
}
array[high] = array[low];
}
array[low] = tmp;
quickSort(array, start, low - 1);
quickSort(array, low + 1, end);
return;
}
private static int findKth(int[] a, int n, int K) {
quickSort(a, 0, a.length - 1);
int last = n - 1;
int tmp = a[last];
int i = 0;
if (K==1){
return a[a.length-1];
}
while (i != K) {
tmp = a[last];
if (tmp != a[last-1]) {
i++;
last--;
} else {
last--;
}
}
return tmp;
}
//测试用例
public static void main(String[] args) {
int[] a = {11,2,333,4,22,1,1,1};
for (int i = 0; i <a.length-1 ; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println(findKth(a, a.length, 3));
}
}
下面是结果