LeetCode 題解 | 215. Kth Largest Element in an Array 第k個大的數(heap C++)

題目描述(中等難度)

原題鏈接
在這裏插入圖片描述

算法

(小根堆) O(nlogk)O(nlogk)

(1)使用小根堆,每當堆中有 k + 1 個元素時,那棧頂一定不可能是第 k 大的元素
(2)遍歷這個nums數組,最後堆中會剩下 k 個元素,此時棧頂元素就是nums數組中第 k 大的數

時間複雜度是O(nlogk)O(nlogk),空間複雜度是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種實現,不來看看嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章