LintCode "Sliding Window Median" & "Data Stream Median"
2015-10-15 14:37
141 查看
Besides heap, multiset<int> can also be used:
View Code
class Solution { void removeOnly1(multiset<int> &ms, int v) { auto pr = ms.equal_range(v); ms.erase(pr.first); } void remove(multiset<int> &lmax, multiset<int> &rmin, int v) { if(v <= *lmax.rbegin()) { removeOnly1(lmax, v); if(lmax.size() < rmin.size()) { int tmp = *rmin.begin(); lmax.insert(tmp); removeOnly1(rmin, tmp); } } else if(v >= *rmin.begin()) { removeOnly1(rmin, v); if((lmax.size() - rmin.size()) > 1) { int tmp = *lmax.rbegin(); removeOnly1(lmax, tmp); rmin.insert(tmp); } } } void addin(multiset<int> &lmax, multiset<int> &rmin, int v) { if(lmax.empty()) { lmax.insert(v); return; } int lmax_v = *lmax.rbegin(); int size_l = lmax.size(), size_r = rmin.size(); if(v <= lmax_v) // to add left { lmax.insert(v); if((size_l + 1 - size_r) > 1) { int tmp = *lmax.rbegin(); rmin.insert(tmp); removeOnly1(lmax, tmp); } } else { rmin.insert(v); if((size_r + 1)> size_l) { int tmp = *rmin.begin(); removeOnly1(rmin, tmp); lmax.insert(tmp); } } } public: /** * @param nums: A list of integers. * @return: The median of the element inside the window at each moving */ vector<int> medianSlidingWindow(vector<int> &nums, int k) { vector<int> ret; multiset<int> lmax, rmin; // sizeof(lmax) - sizeof(rmin) -> [0,1] size_t n = nums.size(); for(int i = 0; i < n; i ++) { if(i >= k) { remove(lmax, rmin, nums[i - k]); } // addin(lmax, rmin, nums[i]); // if(i >= k - 1) { ret.push_back(*lmax.rbegin()); } } return ret; } };
View Code
相关文章推荐
- Ajax Post请求中文乱码问题解决方案
- jquery函数哪些事儿(.siblings( [selector ] ))
- linux下的C语言开发(进程创建及等待)
- 无向图欧拉回路的判定
- HTML5 canvas 瀑布流文字 (骇客帝国效果)
- week6---10月16日 CSS样式
- SSH 登陆失败: Host key verification failed
- [代码]JS原生Ajax,GET和POST
- each()详解
- Android获取apk签名信息(举例说明java反射调用方法步骤)
- Android设置铃声实现代码
- EVDO-简介
- python 变量作用域
- 最新Oracle 和 mysql 的对比参照----开发篇(转)
- 自定义属性编辑器
- 【C项目】注释转换项目
- Linux下安装Apache+php环境
- 【IOS 开发学习总结-OC-50】★ios开发之UI控件——UIToolBar(工具栏)
- Java基础笔记-继承、抽象类、接口、多态、内部类、异常
- C#使用Log4Net记录日志(想直接转载的,但是不支持转到这上面来,复制来的,作者勿怪,学习用)