LeetCode 题解 | 215. Kth Largest Element in an Array 第k个大的数(heap C++)

题目描述(中等难度)

原题链接
LeetCode 题解 | 215. Kth Largest Element in an Array 第k个大的数(heap C++)_第1张图片

算法

(小根堆) O ( n l o g k ) O(nlogk) O(nlogk)

(1)使用小根堆,每当堆中有 k + 1 个元素时,那栈顶一定不可能是第 k 大的元素
(2)遍历这个nums数组,最后堆中会剩下 k 个元素,此时栈顶元素就是nums数组中第 k 大的数

时间复杂度是 O ( n l o g k ) O(nlogk) O(nlogk),空间复杂度是 O ( k ) O(k) O(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];
    }
};

参考资料

【每日算法Day 82】面试经典题:求第K大数,我写了11种实现,不来看看吗?

你可能感兴趣的:(LeetCode)