目录
1.题目
- 1.题目
- 2.思路
- 3.代码实现(Java)
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。
例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。
示例:
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2
进阶: 如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法? 如果数据流中 99% 的整数都在 0 到 100 范围内,你将如何优化你的算法?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-median-from-data-stream
2.思路(1)排序 先定义一个 dataList 数组,然后用 Collections.sort() 对其进行排序,并根据数组长度的奇偶性返回中位数即可。
3.代码实现(Java)//思路1————排序
class MedianFinder {
private List dataList;
/**
* initialize your data structure here.
*/
public MedianFinder() {
dataList = new ArrayList();
}
public void addNum(int num) {
dataList.add(num);
}
public double findMedian() {
//对dataList进行排序
Collections.sort(dataList);
int length = dataList.size();
//根据数组长度的奇偶性返回中位数
return length % 2 == 1 ? dataList.get(length / 2) : (dataList.get((length - 1) / 2) + dataList.get(length / 2)) / 2;
}
}