leetcode_215

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.

Example 1:

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

Example 2:

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

Note:

You may assume k is always valid, 1 ≤ k ≤ array's length.

Solutions

  1. brute force O(nlog(n)) S(1)

  2. sorting

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());
        return nums[nums.size() - k];
    }
};
  1. quick sort based partition O(n) S(1)

  2. time complexity: O(n) + O(n/2) + O(n/4)... worst case: O(n2)

  1. heap O(n) + nlog(k) S(k)

  2. Maintaing a min heap with k largest elements.

  3. Other heap based selection algorithm also works.

Or a manually built heap.

  1. bucket sort O(n) S(max - min + 1)

  1. Iteratively remove the smallest element O(kn) S(k)

  2. The complexity equals to iteratively find the largest element k times.

  1. introselect

  2. binary search

  3. Speculate the target number in the range of 32bit interger by counting the number of elements slower than it. For the target k'th larget number, numbers in the array <= it should be at least k.

Last updated

Was this helpful?