1. 程式人生 > >Leetcode703.Kth Largest Element in a Stream資料流中的第K大元素

Leetcode703.Kth Largest Element in a Stream資料流中的第K大元素

設計一個找到資料流中第K大元素的類(class)。注意是排序後的第K大元素,不是第K個不同的元素。

你的 KthLargest 類需要一個同時接收整數 k 和整數陣列nums 的構造器,它包含資料流中的初始元素。每次呼叫 KthLargest.add,返回當前資料流中第K大的元素。

示例:

int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr); kthLargest.add(3);   // returns 4 kthLargest.add(5);   // returns 5 kthLargest.add(10);  // returns 5 kthLargest.add(9);   // returns 8 kthLargest.add(4);   // returns 8

說明: 

你可以假設 nums 的長度≥ k-1 且k ≥ 1。

 

優先佇列用法部落格:

https://blog.csdn.net/pzhu_cg_csdn/article/details/79166858

 

class KthLargest {
public:
    priority_queue<int, vector<int>, greater<int> > pq;
    int cnt;
    KthLargest(int k, vector<int> nums) {
        cnt = k;
        int len = nums.size();
        for(int i = 0; i< len; i++)
        {
            pq.push(nums[i]);
        }
        while(pq.size() > cnt)
        {
            pq.pop();
        }
    }

    int add(int val) {
        pq.push(val);
        while(pq.size() > cnt)
        {
            pq.pop();
        }
        return pq.top();
    }
};