面试题64. 数据流中的中位数
来源:互联网 发布:fedora dnf和yum 编辑:程序博客网 时间:2024/04/18 09:29
题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
思路1:
用Partition算法,找到中位数,详细见这篇博文
思路2:
采用插入排序的方法,每读取一个数字时,用插入排序让数组保持排序状态,需要O(n2)
但是在求中位数时,只需要O(1)。Java中可以借用LinkedList实现插入排序
import java.util.LinkedList;public class Solution { private LinkedList<Integer> list = new LinkedList<>(); /** * 将数据插入到LinkedList中 */ public void Insert(Integer num) { if(list.isEmpty() || num < list.getFirst()) { list.addFirst(num); }else { boolean insertSuccess = false; for(Integer i : list) { if(num < i) { int index = list.indexOf(i); list.add(index, num); insertSuccess = true; break; } } if(!insertSuccess) { list.addLast(num); } } } /* * 获取中位数 */ public Double GetMedian() { if(list.isEmpty()) { return null; } int mid = list.size() / 2; // 如果长度是偶数 if((list.size() & 1) == 0) { Integer first = list.get(mid - 1); Integer second = list.get(mid); return Double.valueOf(first + second) / 2.0; } return Double.valueOf(list.get(mid)); }}
阅读全文
0 0
- 面试题64. 数据流中的中位数
- 面试题64:数据流中的中位数
- 面试题71:数据流中的中位数
- 面试题64:数据流中的中位数
- 【面试题64】数据流中的中位数
- 面试题64:数据流中的中位数
- 《剑指Offer》学习笔记--面试题64:数据流中的中位数
- 【剑指Offer学习】【面试题64:数据流中的中位数】
- 面试题_64——数据流中的中位数
- 剑指offer-面试题64:数据流中的中位数
- 《剑指offer》面试题64 数据流中的中位数
- 剑指offer--面试题64:数据流中的中位数
- 剑指offer-面试题64-数据流中的中位数
- 剑指offer 面试题64 数据流中的中位数
- 剑指offer面试题[64]-数据流中的中位数
- 【剑指Offer】面试题64:数据流中的中位数
- 剑指offer面试题64 数据流中的中位数(Java实现)
- 【剑指offer】面试题41:数据流的中位数
- Ext4 Howto
- toString & valueOf
- Canny边缘检测原理与C++实现(1)原理部分
- NOIP普及组复赛培训安排
- haproxy+nginx+tomcat+memcache实现动静分离、会话同步集群
- 面试题64. 数据流中的中位数
- JavaScript中8个常见的陷阱
- Redis Sentinel安装部署与常用操作
- 验证码的实现VerifyCodeUtils
- ArrayList源码分析
- easyui datagrid 控件全选
- 自定义带shape的TextView
- PAT (Basic Level) Practise (中文)
- Replica Set配置一个隐藏的副本集成员