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.
publicintfindKthLargest(int[] nums, int k) {
if (nums == null || k <= 0 || k > nums.length) {
return -1;
}
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
int i = 0;
while (i < k) {
minHeap.add(nums[i++]);
}
while (i < nums.length) {
if (nums[i] > minHeap.peek()) {
minHeap.poll();
minHeap.add(nums[i]);
}
i++;
}
return minHeap.peek();
}
Quick Select
public int findKthLargest(int[] nums, int k) {
if (nums == null || k <= 0 || k > nums.length) {
return -1;
}
intbegin = 0;
intend = nums.length - 1;
while (begin <= end) {
int pivotIndex = partition(nums, begin, end);
if (pivotIndex > nums.length - k) {
end = pivotIndex - 1;
}elseif (pivotIndex < nums.length - k) {
begin = pivotIndex + 1;
}else {
return nums[pivotIndex];
}
}
return -1;
}
public int partition(int[] nums, intbegin, intend) {
int pivot = nums[begin];
while (begin < end) {
while (begin < end && nums[end] >= pivot) {
end--;
}
nums[begin] = nums[end];
while (begin < end && nums[begin] <= pivot) {
begin++;
}
nums[end] = nums[begin];
}
nums[begin] = pivot;
return begin;
}
题目描述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, retur...