0215. Kth Largest Element in an Array
https://leetcode.com/problems/kth-largest-element-in-an-array
Description
Given an integer array nums and an integer k, return the kth largest element in the array.
Note that it is the kth largest element in the sorted order, not the kth distinct element.
Example 1:
**Input:** nums = [3,2,1,5,6,4], k = 2
**Output:** 5Example 2:
**Input:** nums = [3,2,3,1,2,4,5,5,6], k = 4
**Output:** 4Constraints:
1 <= k <= nums.length <= 104-104 <= nums[i] <= 104
ac1: quick select
Iterative version:
class Solution {
public int findKthLargest(int[] nums, int k) {
// Edge cases: invalid input.
k--; // Kth largest, index = k - 1 in sorted array.
int start = 0, end = nums.length - 1;
while (start <= end) {
int p = getArrayPartitionIndex(nums, start, end);
if (p == k) return nums[p];
if (p < k) {
start = p + 1;
} else if (p > k) {
end = p - 1;
}
}
return -1;
}
private int getArrayPartitionIndex(int[] nums, int start, int end) {
int pivot = nums[end];
int left = start;
for (int right = start; right < end; right++) {
if (nums[right] >= pivot) {
swap(nums, left, right);
left++;
}
}
swap(nums, left, end);
return left;
}
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}Recursive versioned:
ac2: priority queue
O(NlogK)
Last updated
Was this helpful?