題目描述(中等難度)
算法
(小根堆)
(1)使用小根堆,每當堆中有 k + 1 個元素時,那棧頂一定不可能是第 k 大的元素
(2)遍歷這個nums數組,最後堆中會剩下 k 個元素,此時棧頂元素就是nums數組中第 k 大的數
時間複雜度是,空間複雜度是
C++代碼1
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int, vector<int>, greater<int> > q;
for (auto x : nums) {
q.push(x);
if (q.size() > k) q.pop();
}
return q.top();
}
};
C++代碼2
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int n = nums.size();
nth_element(nums.begin(), nums.begin() + n - k, nums.end());
return nums[n - k];
}
};