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: 4Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
Solutions
brute force O(nlog(n)) S(1)
sorting
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(), nums.end());
return nums[nums.size() - k];
}
};quick sort based partition O(n) S(1)
time complexity: O(n) + O(n/2) + O(n/4)... worst case: O(n2)
heap O(n) + nlog(k) S(k)
Maintaing a min heap with k largest elements.
Other heap based selection algorithm also works.
Or a manually built heap.
bucket sort O(n) S(max - min + 1)
Iteratively remove the smallest element O(kn) S(k)
The complexity equals to iteratively find the largest element k times.
introselect
binary search
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?