Lintcode360 Sliding Window Median solution 题解
【题目描述】
Given an array of n integer, and a moving window(size k), move the window at each iteration from the start of the array, find the median of the element inside the window at each moving. (If there are even numbers in the array, return the N/2-th number after sorting the element in the window. )
给定一个包含 n 个整数的数组,和一个大小为k的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口内的中位数。(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字。)
【题目链接】
www.lintcode.com/en/problem/sliding-window-median/
【题目解析】
这道题和Data Stream Median类似,也是寻找动态数组的media,因此也可以用maxheap+minheap来解。随着窗口的移动,每次先加入一个新元素,再删去一个旧元素,再使两个heap中元素数量平衡即可。
用一个最大堆来记录较小一半的元素,一个最小堆来记录较大一半的元素。
先初始化最初的窗口里的k个元素。将元素加入最大堆,若为奇数次,则比较最大堆堆顶和最小堆堆顶元素大小,若最大堆堆顶元素大于和最小堆堆顶元素,则交换两个堆顶元素,若为偶数次,则将最大堆堆顶元素加入最小堆。
然后开始移动窗口,先将新元素加入,若比原median小,则加入最大堆,反之则加入最小堆。然后删除窗口最前面的一个元素。
然后调整最大堆和最小堆的大小。根据k值可以分两种情况讨论:
1)若k为偶数,则需要最大堆中元素和最小堆中元素数量相等
2)若k为奇数,则需要最大堆中元素比最小堆中元素多1个
此时最大堆的堆顶元素即为此时窗口元素的median
【参考答案】
Lintcode360 Sliding Window Median solution 题解的更多相关文章
- LeetCode 480. Sliding Window Median
原题链接在这里:https://leetcode.com/problems/sliding-window-median/?tab=Description 题目: Median is the middl ...
- [LeetCode] Sliding Window Median 滑动窗口中位数
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- Leetcode: Sliding Window Median
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- Sliding Window Median LT480
Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
- 【LeetCode】480. 滑动窗口中位数 Sliding Window Median(C++)
作者: 负雪明烛 id: fuxuemingzhu 公众号: 每日算法题 本文关键词:LeetCode,力扣,算法,算法题,滑动窗口,中位数,multiset,刷题群 目录 题目描述 题目大意 解题方 ...
- LintCode "Sliding Window Median" & "Data Stream Median"
Besides heap, multiset<int> can also be used: class Solution { void removeOnly1(multiset<in ...
- 滑动窗口的中位数 · Sliding Window Median
[抄题]: 给定一个包含 n 个整数的数组,和一个大小为 k 的滑动窗口,从左到右在数组中滑动这个窗口,找到数组中每个窗口内的中位数.(如果数组个数是偶数,则在该窗口排序数字后,返回第 N/2 个数字 ...
- Sliding Window Median
Description Given an array of n integer, and a moving window(size k), move the window at each iterat ...
- 480 Sliding Window Median 滑动窗口中位数
详见:https://leetcode.com/problems/sliding-window-median/description/ C++: class Solution { public: ve ...
随机推荐
- 将Tomcat配置到你的mac电脑上,命令行启动tomcat
1.下载tomcat7文件 2.编辑打开.bash_profile vim .bash_profile 3.在该文件最后面添加(CATALINA_HOME为tomcat解压目录) CATALINA_H ...
- django-表单
一.从Request对象中获取信息 1.URL相关的信息 属性/方法 说明 举例 request.path 除域名以外的请求路径,以正斜杠开头 "/hello/" request. ...
- REST&RESTFUL
REST(表征性状态传输,Representational State Transfer)指的是一组架构约束条件和原则.是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格 ...
- github的拉取、提交,创建分支与合并
前期准备: 1.安装git 官网地址:https://git-scm.com/(下载下来,直接下一步) 2.github账号(这有点废话) 3.配置github密钥 下载及安装好git后,右 ...
- R语言-时间序列
时间序列:可以用来预测未来的参数, 1.生成时间序列对象 sales <- c(18, 33, 41, 7, 34, 35, 24, 25, 24, 21, 25, 20, 22, 31, 40 ...
- 在Hadoop2.2基础上安装Spark(伪分布式)
没想到,在我的hadoop2.2.0小集群上上安装传说中的Spark竟然如此顺利,可能是因为和搭建Hadoop时比较像,更多需要学习的地方还是scala编程和RDD机制吧 总之,开个好头 原来的集群: ...
- Jmeter_beanshell实现字符串加密
Jmeter内置的没有MD5加密方法,所以需要写一些java代码实现加密功能,以下是具体操作: 1:用eclipse建个工程(包名.类名.方法名自己起) package com.wjika.test; ...
- SQL注入攻击三部曲之进阶篇
SQL注入攻击三部曲之进阶篇 通过入门篇的学习,我们知道了SQL注入攻击的判断方法,但是如果想侵入网站,获取网站的机密内容,那么仅靠入门篇的知识是无法达到的.本篇文章我们将进一步的分析SQL注入攻击. ...
- java重写和重载
方法的重载: 在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类 ...
- BOM(浏览器对象模型)的一些操作
一个完整的JavaScript实现由三部分组成: ECMAScript:核心,定义语言基础,规定了语言的组成部分(语法,类型,关键字,保留字,对象等) DOM:文档对象模型,·DOM把整个页面映射成一 ...