Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
思路是运用quick selection 和 quick sort 很像。
1、把数组里的一个数设为pivot, 把小于pivot的数放在左边,把大于pivot的数放在右边
2、比较k和left的大小,如果k大的话,就查找右半边,如果k小的话,就查找左半边
public class Solution {
public int findKthLargest(int[] nums, int k) {
return findKthLargest(nums, 0, nums.length - 1, nums.length - k);
}
public int findKthLargest(int[] nums, int start, int end, int k) {
int pivot = nums[end];
int left = start;
for (int i = start; i < end; i++) {
if (nums[i] <= pivot) swap(nums, left++, i);
}
swap(nums,left,end);
if (left == k) return nums[left];
else if (left < k) return findKthLargest(nums, left + 1, end, k);
else return findKthLargest(nums, start, left - 1, k);
}
public void swap(int[] a, int i, int j) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}