public int findKthLargest(int[] nums, int k) {
return getKthNum(nums, 0, nums.length - 1, k - 1);
public int getKthNum(int[] nums, int start, int end, int k) {
int pivot = partition(nums, start, end);
return getKthNum(nums, pivot + 1, end, k);
return getKthNum(nums, start, pivot - 1, k);
public int partition(int[] nums, int start, int end) {
int mid = start + (end - start) / 2;
for (int i = start; i < end; i++) {
if (nums[i] > nums[end]) {
public void swap(int[] nums, int i, int j) {