1 using namespace std;
2 class KthLargest {
3 public:
4 KthLargest(int k, vector<int>& nums) {
5
6 pos = k;
7 data.assign(nums.begin(),nums.end());
8 sort(data.begin(),data.end(),greater<int>());//从大到小进行排序
9
10 if(data.size() > pos) data.erase(data.begin()+pos,data.end());//进行删除操作 只保留前k个数
11 make_heap(data.begin(), data.end(), greater<int>());//构建一个小根堆
12 }
13
14 int add(int val) {
15 if(data.size() < pos)
16 {
17 // cout << val << endl;
18 data.push_back(val);//插入值
19 push_heap(data.begin(), data.end(),greater<int>());//重新设置堆
20 return data[0];
21 }
22
23 if(val >= data[0])
24 {
25 pop_heap(data.begin(),data.end(), greater<int>());//将最大根拉到最后一个位置 剩下[first,last-1)重新构造堆
26 data.pop_back();//删除根
27 data.push_back(val);//插入值
28 push_heap(data.begin(), data.end(), greater<int>());//重新设置堆
29 }
30 return data[0];
31 }
32
33 private:
34 vector<int> data;
35 int pos;
36 };
37
38 /**
39 * Your KthLargest object will be instantiated and called as such:
40 * KthLargest* obj = new KthLargest(k, nums);
41 * int param_1 = obj->add(val);
42 */