您当前的位置: 首页 >  leetcode

星许辰

暂无认证

  • 0浏览

    0关注

    466博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

LeetCode_排序_困难_295.数据流的中位数

星许辰 发布时间:2021-08-05 08:44:22 ,浏览量:0

目录
  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

例如, [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;
    }
}
关注
打赏
1665627467
查看更多评论
立即登录/注册

微信扫码登录

0.3288s