美文网首页
【LeetCode】数据流中的第K大元素

【LeetCode】数据流中的第K大元素

作者: MyyyZzz | 来源:发表于2019-03-28 23:41 被阅读0次

设计一个找到数据流中第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。

解题思路:

想到了STL里的 priority_queue<Type, Container, Functional>
Type为数据类型,Container为存储容器,默认为vector,Function为元素比较方法,默认为operator<,也就是优先队列为大顶堆,即队头元素最大。

代码:

class KthLargest {
private:
    priority_queue<int, vector<int>, greater<int> > myqueue; //小顶堆
    int k;
public:
    KthLargest(int k, vector<int> nums) {
        this->k = k;
        for(int i=0; i<nums.size(); i++)
        {
            myqueue.push(nums[i]);
            if(i>k-1)
                myqueue.pop();
        }
    }
    
    int add(int val) {
        myqueue.push(val);
        if(myqueue.size() > k)
            myqueue.pop();
        return myqueue.top();
    }
};

相关文章

网友评论

      本文标题:【LeetCode】数据流中的第K大元素

      本文链接:https://www.haomeiwen.com/subject/tnnhbqtx.html