public static int findKthLargest(int[] nums, int k) {
if (nums == null || nums.length == 0) {
return 0;
}
//将第K个最大元素转换为第l个最小元素
int l = nums.length + 1 - k;
return findKthLargestWithIndex(nums, 0, nums.length - 1, l);
}
public static int findKthLargestWithIndex(int[] nums, int left, int right, int l) {
int element = 0;
int p = SortAlgorithm.randomPartitionEx(nums, left, right);
if (p - left + 1 == l) {
element = nums[p];
}
if (p - left + 1 > l) {
element = findKthLargestWithIndex(nums, left, p, l);
}
if (p - left + 1 < l) {
element = findKthLargestWithIndex(nums, p + 1, right, l - (p - left + 1));
}
return element;
}