Besides heap, multiset<int> can also be used:

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()) > )
{
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 + - size_r) > )
{
int tmp = *lmax.rbegin();
rmin.insert(tmp);
removeOnly1(lmax, tmp);
}
}
else
{
rmin.insert(v);
if((size_r + )> 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 = ; i < n; i ++)
{
if(i >= k)
{
remove(lmax, rmin, nums[i - k]);
} //
addin(lmax, rmin, nums[i]);
//
if(i >= k - )
{
ret.push_back(*lmax.rbegin());
}
}
return ret;
}
};

最新文章

  1. 使用VS+VisualGDB编译调试Linux程序
  2. fdisk,mount.label
  3. 魅族手机(魅蓝note)无法作为调试设备连接到mac问题的解决
  4. Webpack教程二
  5. [转]CharacterController与Rigidbody
  6. Android studio 安装,JDK 出错解决方案
  7. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转)
  8. Python Selenium 之数据驱动测试
  9. SQL 聚集函数(聚组函数)的使用 注意事项
  10. mybatis_异常
  11. D. Kilani and the Game(多源BFS)
  12. Python(十三)python的函数重载
  13. AT2046 Namori 图论
  14. float浮动,定位
  15. react事件中的this指向
  16. 创建Python程序
  17. 解决ios微信内置浏览器触发事件有问题方案
  18. 4-在windon10上mysql安装与图形化管理
  19. C#的可空类型与不可空类型
  20. 基于RedHat6.5的Greenplum环境配置

热门文章

  1. Python编程小记
  2. The Hidden Pitfalls of AsyncTask
  3. 安装GD库解决ThinkPHP 验证码Call to undefined function Think\imagecreate()出错
  4. HS光流算法详解&lt;转载&gt;
  5. POJ 1321 棋盘问题 --- DFS
  6. scala言语基础学习十
  7. POJ 1195 Mobile phones(二维树状数组)
  8. Dwarves (有向图判环)
  9. C语言 a和&amp;a的区别
  10. 黑马程序员——JAVA基础之简述 类的继承、覆写