当前位置: 首页 > news >正文

实时中位数

题目描述
现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。

给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。

测试样例:
[1,2,3,4,5,6],6
返回:[1,1,2,2,3,3]

构建一个最大堆 一个最小堆 保持 最大堆的size >= 最小堆的size 且差值不超过1,且最大堆的堆顶小于最小堆的堆顶

每次返回最大堆的堆顶

import java.util.*;

public class Middle {
    public int[] getMiddle(int[] A, int n) {
        // write code here
       // write code here
        PriorityQueue<Integer> min_heap = new PriorityQueue<Integer>();
        PriorityQueue<Integer> max_heap = new PriorityQueue<Integer>(new Comparator<Integer>() {
        	@Override
        	public int compare(Integer o1, Integer o2) {
        		return o2-o1;
        	}
        });
        int [] m = new int[n];
        
        for(int i=0; i<n; i++) {
        	if(max_heap.size()==0 || A[i]<max_heap.peek())
        		max_heap.add(A[i]);
        	else
        		min_heap.add(A[i]);
        	if(max_heap.size() == min_heap.size()+2) {
        		int a = max_heap.poll();
        		min_heap.add(a);
        	}
        	if(max_heap.size()+1 == min_heap.size()) {
        		max_heap.add(min_heap.poll());
        	}
        	m[i] = max_heap.peek();
        }
        
        return m;
    }
}

相关文章:

  • 【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误...
  • 约瑟夫问题
  • C#实现UDP分包组包
  • tomcat 集群搭建
  • 善变的同伴
  • IDC:PC 今年第一季度出货量继续下滑趋势,比起去年同期跌了13.9%
  • 非递归中序,后序遍历二叉树
  • Eclipse安装aptana
  • udp datetime服务
  • linux信号浅谈
  • hdu 2142 Can you find it?
  • 线程锁
  • Linux下禁用独立显卡
  • vue界面
  • 如何做项目?
  • @jsonView过滤属性
  • 《深入 React 技术栈》
  • 10个最佳ES6特性 ES7与ES8的特性
  • extract-text-webpack-plugin用法
  • FineReport中如何实现自动滚屏效果
  • github指令
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Mybatis初体验
  • PHP的Ev教程三(Periodic watcher)
  • Rancher-k8s加速安装文档
  • Selenium实战教程系列(二)---元素定位
  • vue-cli在webpack的配置文件探究
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • zookeeper系列(七)实战分布式命名服务
  • 分布式事物理论与实践
  • 如何学习JavaEE,项目又该如何做?
  • 什么是Javascript函数节流?
  • 一天一个设计模式之JS实现——适配器模式
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #define
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)STL算法之遍历容器
  • (6)添加vue-cookie
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (js)循环条件满足时终止循环
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (搬运以学习)flask 上下文的实现
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)scrum常见工具列表
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net MVC中使用angularJs刷新页面数据列表