用快速排序逆序排好数组,第K大的数就是数组中下标为k - 1的数。
public static int findKthLargest(int[] nums, int k){
quickSort(nums, 0, nums.length - 1);
return nums[k - 1];
}
public static void quickSort(int[] nums, int start, int end){
if(start >= end){
return;
}
int left = start;
int right = end;
int mid = nums[(right + left) >> 1];
//逆序,因为是第几大
while(left <= right){
//条件与正序时相反
while(nums[left] > mid) left++;
while(nums[right] < mid) right--;
if(left <= right){
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
right--;
}
}
quickSort(nums, start, right);
quickSort(nums, left, end);
}