《剑指offer》数据流中的中位数

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

解析:由于数据是动态的添加的,不用移除,所以用list存储添加进去的数值。关键点是在获取数据流中的中位数。

注意:需要先给list排序

判断list里面的数值的个数的奇偶性。如果是list的大小是奇数,例如里面存储的是1 2 3 4 5,那么中位数就是3,直接list.size()/2后得到的就是中位数的下角标了。如果list的大小是偶数,例如里面存储的是1 2 3 4。显然中位数就是 (2 + 3)/2,那么如何求得2、3?就是list.size()-1后再除以2就得到数值2的下角标了,然后list.size()/2得到3的角标了。然后你就可以干你想干的了。

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Solution {

    List<Integer> list = new ArrayList<>();
    public void Insert(Integer num) {
        list.add(num);
    }

    public Double GetMedian() {
        Collections.sort(list);
        Double result=null;
        if(list.size()%2!=0){//奇数个数字 1 2 3  4  5
            result= Double.valueOf(list.get(list.size()/2));
        }else {//偶数个数字  1 2 3 4
           result=(Double.valueOf(list.get((list.size()-1)/2))+Double.valueOf(list.get(list.size()/2)))/2;
        }
        return result;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值