Kth Largest Element in an Array

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.

Thoughts:

  1. naive: sort and get: O(N lg N) running time + O(1) memory

  2. use min heap: O(N lg K) running time + O(K) memory

  3. selection algorithm (partition method): O(NlogN) best case / O(N^2) worst case running time + O(1) memory

  4. Code 1. Naive:

Code 2. Min Heap:

Code 2.1 Min Heap C++ (implementation: multiset)

Code 2.2 Min Heap: Python

Code 2.3 Max Heap: C++

Code 2.3 Max Heap C++ (implementation: max_heapify)

Code 3. Partition, QuickSelect:

Python:

So how can we improve the above solution and make it O(N) guaranteed (practically speaking)? The answer is quite simple, we can randomize the input, so that even when the worst case input would be provided the algorithm wouldn't be affected. (Blum-Floyd-Pratt-Rivest-Tarjan algorithm) In practice , when the array is long enough. The possibility is almost zero.

Last updated

Was this helpful?