[leetcode]703. Kth Largest Element in a Stream

[leetcode]703. Kth Largest Element in a Stream


Analysis

年纪大了就会比较惜命~—— [ummmm~]

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.
这道题是要我们实现一个结构体,给定一个数组,然后每次调用add(val)的时候会向这个数组中添加一个数val,并且输出此时数组中第K大的数。
用最小堆来做,即priority_queue,每次输出最小的那个数就行了。

Implement

class KthLargest {
public:
    KthLargest(int k, vector<int> nums) {
        size = k;
        for(auto num:nums){
            pq.push(num);
            if(pq.size() > size)
                pq.pop();
        }
    }

    int add(int val) {
        pq.push(val);
        if(pq.size() > size)
            pq.pop();
        return pq.top();
    }
private:
    priority_queue<int, vector<int>, greater<int> > pq;
    int size;
};

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

猜你喜欢

转载自blog.csdn.net/weixin_32135877/article/details/81167819