题目描述

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。


import java.util.*;public class Solution {public ArrayList<Integer> list = new ArrayList<>();public Solution() {// TODO Auto-generated constructor stub}public void Insert(Integer num) {int size = list.size();list.add(num);int index = bs(num);for (int i = size-1; i >= index; i--)swap(i+1, i);}public Double GetMedian() {int size = list.size() - 1;if (size % 2 == 1)return Double.valueOf((list.get(size / 2) + list.get(size / 2 + 1)) / 2.0);elsereturn Double.valueOf(list.get(size / 2));}public int bs(int val) {int l = 0;int r = list.size() - 1;int mid = 0;while (l <= r) {mid = (l + r) >> 1;if (list.get(mid) <= val) {l = mid + 1;} else {r = mid - 1;}}return l;}public void swap(int i, int j) {int tmp = list.get(i);list.set(i, list.get(j));list.set(j, tmp);}}

用插入排序重新排序。这种做法比较垃圾。重新写了一个用优先级队列的方法。一个大根堆和一个小根堆


import java.util.*;public class Solution {public PriorityQueue<Integer> maxHeap;public PriorityQueue<Integer> minHeap;public Solution() {maxHeap = new PriorityQueue<Integer>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}});minHeap = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;}});}public void Insert(Integer num) {if (this.maxHeap.isEmpty() || num <= this.maxHeap.peek()) {this.maxHeap.add(num);} else {this.minHeap.add(num);}while (Math.abs(this.maxHeap.size() - this.minHeap.size()) > 1) {if (this.maxHeap.size() > this.minHeap.size()) {this.minHeap.add(this.maxHeap.poll());} else {this.maxHeap.add(this.minHeap.poll());}}}public Double GetMedian() {int maxsize = this.maxHeap.size();int minsize = this.minHeap.size();if ((minsize + maxsize) % 2 == 0) {return Double.valueOf((this.maxHeap.peek() + this.minHeap.peek()) / 2.0);} else {if (maxsize > minsize) {return Double.valueOf(this.maxHeap.peek());} else {return Double.valueOf(this.minHeap.peek());}}}}

牛客网 在线编程 数据流中的中位数相关推荐

  1. 牛客网在线编程----算法入门篇

    标题本篇博文主要是记录下自己的在线编程情况,初次练习,有的算法还待改进,大家有需要可以去牛客网上面多练练! 有需戳–>牛客网在线编程 NC65.题目描述 大家都知道斐波那契数列,现在要求输入一个 ...

  2. 《剑指Offer》面试题四(牛客网在线编程第一题):二维数组中的查找(Java实现)

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  3. 牛客网在线编程——二维数组中的查找

    今天是第二次用牛客的在线编程,上次还是去年的七月一号,已然过去近一年的时间,遇到了不少坑,首先题目看错了,没看到数据是有序的,其次就是对二维数组的输入有些不解,是用户手动输入还是现成的,没有说清楚,最 ...

  4. 牛客网 在线编程 局部最小值位置

    链接:https://www.nowcoder.com/questionTerminal/322eb1da892448f4b18d9b21a6d48c99 来源:牛客网 定义局部最小的概念.arr长度 ...

  5. Python:启程 数据分析-牛客网在线编程-中级函数12-23

    DA12 牛客网不同语言使用人数 当时没有做出来,看答案发现有pandas 计数函数value_counts(),详解参考了以下博主的文章 python value_counts()的基础及进阶用法( ...

  6. 牛客网在线编程专题《剑指offer-面试题28》字符串的排列

    我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习.深度学习.计算机视觉.智能对话系统相关内容,分享 ...

  7. 解决牛客网在线编程,本地编译结果正确,提交结果不正确问题!!!

    代码提交后显示: 可我vs上编译的结果明明是对的啊: 经过网上一番查找,本地编译结果正确,提交结果不正确问题主要有两个原因: 1. 因为有多组测试用例,所以输入必须是必须是 while(cin> ...

  8. 牛客网在线编程全部题目

    我的状态 题号 题目 知识点 难度 通过率 考察次数 NC1 大数加法 字符串 模拟 中等 43.92% 46 NC2 重排链表 链表 中等 25.94% 11 NC3 链表中环的入口结点 链表 哈希 ...

  9. 牛客网在线编程专题《剑指offer-面试题15》链表中倒数第k个节点

    题目链接: https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167& ...

最新文章

  1. 设置 VirtualBox 虚拟机访问局域网
  2. SGU101 求有重边的无向图欧拉迹
  3. SolrJ搜索功能切换到集群
  4. PMcaff会员圣诞礼物大放送!
  5. Boost笔记--Thread--Ubuntu上初次使用时遇到的问题
  6. Mysql的两种存储引擎以及区别
  7. Extjs6(六)——增删查改之查询
  8. Android 通知栏用法例子
  9. 一点一点学写Makefile-1
  10. salt 源码之 salt-minion启动过程
  11. 我的cocos2d-x集成sharesdk之旅(转)
  12. 最牛通达信短线超强波段主图指标公式 源码
  13. 新老电脑的文件/数据同步记录
  14. c当中extern详解
  15. Java中使用isAlphabetic()办法无法解决判断一个char是英文字母,该用别的方法解决
  16. python遗传算法八皇后_python解决八皇后算法详解
  17. 计算机开机白屏怎么处理,电脑开机白屏怎么办如何解决开机白屏的问题
  18. 2022-6-13 全O(1)的数据结构,两数相加,无重复字符的最长子串,寻找两个正序数组的中位数,盛最多水的容器,......
  19. python爬虫之selenium的使用
  20. 小鸟云管理终端(VNC连接)常见问题

热门文章

  1. Vue项目实战09 : vue3.0实现点击切换验证码(组件)及校验
  2. vue报错vue-router.esm.js?8c4f:2062 Uncaught (in promise) Error: Avoided redundant navigation to curren
  3. angularjsl路由_AngularJS实现路由实例
  4. 基于Echarts的HTML5 Canvas折线图DEMO演示
  5. Ajax入门总结--Ajax跨域请求
  6. Eclipse安装阿里巴巴Java开发规约插件
  7. Android:在安卓中使用TFLite模型
  8. DNN结构:CNN、LSTM/RNN中的Attention结构
  9. DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions
  10. Python快速定位工作目录