在未排序的数组中找到第 k 个最⼤的元素。请注意,你需要找的是数组排序后的第 k 个最⼤的元素,⽽不是第 k 个不同的元素。
采用快速排序思路解答
public static int returnTopK(int[] arr, int topK) {
if (topK <= 0 || topK > arr.length) {
return -1;
}
return partition(arr, 0 ,arr.length-1, arr.length-topK);
}
private static int partition(int[] arr, int left, int right, int topK) {
int pivot = arr[left];
int loLeft = left;
int loRight = right;
while (loLeft < loRight) {
while (arr[loRight] >= pivot && loLeft < loRight) {
loRight--;
}
if (loLeft < loRight) {
arr[loLeft++] = arr[loRight];
}
while (arr[loLeft] <= pivot && loLeft < loRight) {
loLeft++;
}
if (loLeft < loRight) {
arr[loRight--] = arr[loLeft];
}
}
arr[loLeft] = pivot;
if (loLeft == topK) {
return arr[loLeft];
} else if (loLeft > topK) {
return partition(arr, left, loLeft-1, topK);
} else {
return partition(arr, loLeft+1, right, topK);
}
}