首页 > 其他 > 详细

leetcode 703数据流中的第K大元素

时间:2019-03-18 21:05:16      阅读:155      评论:0      收藏:0      [点我收藏+]

这里思路是堆排序,而且是小根堆。C++中包含在头文件<queue>的priority_queue本质就是堆排序实现的。其中priority_queue函数原型是

priority_queue<Type, Container, Functional> 

       Type 就是数据类型,
       Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),
       Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大根堆 。
 
//降序队列(大根堆)
priority_queue <int,vector<int>,less<int> >q;
 
//升序队列(小根堆)
priority_queue <int,vector<int>,greater<int> > q;
 
另外,greater和less是std实现的两个仿函数(就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了)
本题代码如下:
class KthLargest {
private:
     priority_queue<int, vector<int>, greater<int>> heap;
     int size;
public:
    KthLargest(int k, vector<int> nums) {
       size=k;
        for (int i = 0; i < nums.size(); i++){            
            heap.push(nums[i]);
           if(heap.size()>k)  heap.pop();           
       }

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

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

参考:https://www.cnblogs.com/paulprayer/p/9855940.html

leetcode 703数据流中的第K大元素

原文:https://www.cnblogs.com/wtt1996/p/10554779.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!