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.
You must solve it in O(n)
time complexity.
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 <= 105
-104 <= nums[i] <= 104
Code
Quick Select
Time Complexity: O(n), Space Complexity: O(n)
若沒有 randonmized input,runtime 會慢很多(240ms),有的話只需要(102ms)。
partial sorting(nth_element & partial_sort)
Time Complexity: O(n), Space Complexity: O(n)
priority_queue
default 為 max heap,而 multiset
default 為 min heap。
在寫 custom cmp 時,記得只有 priority_queue
的大小方向和其他人相反。
Max Heap
Time Complexity: O(nlogk), Space Complexity: O(k)
注意 multiset 的 cmp 大小比較順序。
Min Heap
Time Complexity: O(nlogk), Space Complexity: O(k)
Counting Sort
Source