# 703.Kth Largest Element in a Stream

**703.Kth Largest Element in a Stream**

难度:Easy

> Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

Your KthLargest class will have a constructor which accepts an integer k and an integer array nums, which contains initial elements from the stream. For each call to the method KthLargest.add, return the element representing the kth largest element in the stream.

```
Example:

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
Note: 
You may assume that nums' length ≥ k-1 and k ≥ 1.
```

使用最小堆完成，不过需要注意length< k的情况。这里补`INT_MIN`。

```
class KthLargest {
priority_queue<int,vector<int>,greater<int>>kth;
public:
    KthLargest(int k, vector<int>& nums) {
       
      
        for(auto n:nums)
            kth.push(n);
        for(int i=nums.size();i<k;i++)
            kth.push(INT_MIN);
        for(int i=0;i<int(nums.size())-k;i++)
          kth.pop();

    }
    
    int add(int val) {
        if(val>kth.top())
           {
               kth.pop();
               kth.push(val);
           }
     
        return kth.top();
    }
};

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest* obj = new KthLargest(k, nums);
 * int param_1 = obj->add(val);
 */

```

> 执行用时 :64 ms, 在所有 C++ 提交中击败了89.78%的用户\
> 内存消耗 :19.3 MB, 在所有 C++ 提交中击败了87.57%的用户
