剑指offer系列之六十二:数据流中的中位数
2015-12-21 14:14
120 查看
题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
根据题目的意思,就是对数据流中的数据进行排序然后得到其中位数。要解决的关键问题是如何在读入数据的时候就对数据进行排序。实际上可以看成是插入排序算法的应用,可以维持一个List集合,保证每次读入数据集合中的数据都是排序的。基本思路是:从集合的第一个元素开始,依次比较与新读入的元素的大小关系,从而把新读入的数据插入到合适的位置。可以看出,这实际上就是插入排序的思想了。下面是具体实现的代码(已被牛客AC):
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
根据题目的意思,就是对数据流中的数据进行排序然后得到其中位数。要解决的关键问题是如何在读入数据的时候就对数据进行排序。实际上可以看成是插入排序算法的应用,可以维持一个List集合,保证每次读入数据集合中的数据都是排序的。基本思路是:从集合的第一个元素开始,依次比较与新读入的元素的大小关系,从而把新读入的数据插入到合适的位置。可以看出,这实际上就是插入排序的思想了。下面是具体实现的代码(已被牛客AC):
import java.util.ArrayList; public class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public void Insert(Integer num) { int index = 0; int size = list.size(); while (index < size) { if (num <= list.get(index)) break; index++; } list.add(index, num); } public Double GetMedian() { int size = list.size(); if ((size & 1) == 0) return (double) ((list.get(size / 2) + list.get(size / 2 - 1)) / 2.0); return (double)list.get(size / 2) * 1.0; } }
相关文章推荐
- js数据存放
- JQuery获取Checkbox组的值
- 先执行javascript在执行ios原生函数
- js变量提升
- 【JavaScript】JavaScript获取当前时间
- 解决setTimeout 计时器重复调用的问题
- Javascript中null值,特别注意的两点
- css3 常用命令总结(不定期更新)
- JAVASCRIPT中NULL值,特别注意的两点
- jquery获取地址栏的get参数
- 横向滚动条展示 css
- React-Native 在window下开发andriod
- 将FeatClass属性表高效率转换成DataTable
- Ext.js5表单—注册表单(42)
- jsp的三种自定义标签 写法示例
- 用JQuery操作元素的style属性
- BBOSS框架使用jquery方式传參到后台的时候,要注意的事项
- 代码高亮javascript 插件 syntaxhighlighter 使用介绍
- leetcode (228) Summary Ranges js代码实现
- Js/Jquery获取iframe中的元素