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:** 5

Example 2:

**Input:** nums = [3,2,3,1,2,4,5,5,6], k = 4
**Output:** 4

Constraints:

  • 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?