题目描述
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:
[1,3,5,2,2],5,3
返回:
2
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf?tpId=188&&tqId=35164&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking
import java.util.*;
public class Finder {
public int findKth(int[] a, int n, int K) {
return quickSort(a, 0, a.length - 1, K);
}
public int quickSort(int[] arr, int l, int r, int k) {
int p = partition(arr, l, r);
if (p == k-1) {
return arr[p];
} else if (p > k-1) {
return quickSort(arr, l, p-1, k);
} else {
return quickSort(arr, p+1, r, k);
}
}
public int partition(int[] arr, int l, int r) {
int target = arr[l];
int x = l;
for (int i = l+1; i <= r; i++) {
if (arr[i] > target) {
swap(arr, i, ++x);
}
}
swap(arr, x, l);
return x;
}
public void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}