LeetCode:703. 數據流中的第K大元素

       本題的解題過程如下,首先要明確題目的意思:本題目要求給定vector在放入最小堆之後第K大的元素,我們可以在添加元素的時候(也就是add函數)檢查隊中的元素格式是否大於K,一旦發現大於K那麼就將多餘的數字彈出,當我們將目標值val加入堆中之後,仍然要維護堆的大小,其過程同上,最後將堆頂元素返回即可。
class KthLargest {
public:
    priority_queue<int, vector<int>, greater<int> > q;//定義一個最小堆
    int K;
    KthLargest(int k, vector<int>& nums) {
        //不斷地push元素
        K=k;
        for(int i=0;i<nums.size();i++)
        {
            q.push(nums[i]);
            if(q.size()>K)
            {
                q.pop();
            }
        }
    }
    
    int add(int val) {
        while(q.size()>K)
        {
            q.pop();
        }
        q.push(val);
        if(q.size()>K)
        {
            q.pop();
        }
        return q.top();
    }
};

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest* obj = new KthLargest(k, nums);
 * int param_1 = obj->add(val);
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章