lintcode: Data Stream Median
2016-04-18 17:18
441 查看
Numbers keep coming, return the median of numbers at every time a new number added.
维持一个大顶堆,一个小顶堆;大顶堆存有序的前一半数据,小顶堆存有序的后一半数据;大顶堆的堆顶就是每次的中位数。
注意要 维持maxHeap.size()==minHeap.size()+1或者maxHeap.size()==minHeap.size()
参考:/article/7966802.html
维持一个大顶堆,一个小顶堆;大顶堆存有序的前一半数据,小顶堆存有序的后一半数据;大顶堆的堆顶就是每次的中位数。
注意要 维持maxHeap.size()==minHeap.size()+1或者maxHeap.size()==minHeap.size()
参考:/article/7966802.html
class Solution { public: /** * @param nums: A list of integers. * @return: The median of numbers */ struct mycmp{ bool operator()(const int a,const int b)const{ return a>b; } }; vector<int> medianII(vector<int> &nums) { // write your code here vector<int> res; int len=nums.size(); if(len==0){ return res; } priority_queue<int> maxHeap; priority_queue<int,vector<int>,mycmp> minHeap; maxHeap.push(nums[0]); res.push_back(nums[0]); for(int i=1;i<len;i++){ if(nums[i]<=maxHeap.top()){ maxHeap.push(nums[i]); }else{ minHeap.push(nums[i]); } /*维持maxHeap.size()==minHeap.size()+1或者maxHeap.size()==minHeap.size()*/ if(maxHeap.size()>minHeap.size()+1){ int top=maxHeap.top(); maxHeap.pop(); minHeap.push(top); } if(maxHeap.size()<minHeap.size()){ int top=minHeap.top(); minHeap.pop(); maxHeap.push(top); } res.push_back(maxHeap.top()); } return res; } };
相关文章推荐
- 25. Reverse Nodes in k-Group
- 机器学习基石第二讲:learn to answer yes/no
- Android 获取本机WIFI及3G网络IP
- android内存泄露案例和解析
- datawindow在调试的时候retrieve不出来的原因
- Win8.1提示激活windows错误代码 0xC004F074如何解决
- 浅谈可变参数列表
- [C++]函数对象(二)
- xcconfig 使用说明
- 完美解决ScrollView嵌套GridView
- 自制反汇编逆向分析工具 迭代第五版本 (二)
- iOS之本地推送通知使用介绍
- Ant:build.xml 结构
- 走在工作路上
- theano tutorial(三)
- Web开发之一:Web UI技术综述
- easyUI实现动态增加表头
- git代码库回滚
- 微信公众号开发之JSSDK:记config:invalid signature 的错误排查
- WebView loadUrl,loadData,loadDataBase