最近工作需要 要求把python的代码写成java版本,python中有一个np.median()求中位数的方法,java决定手写一个

先说说什么是中位数:

中位数就是中间的那个数,

如果一个集合是奇数个,那么中位数就是按大小排列后,最中间那个数,

如果一个集合是偶数个,那么中位数就是按大小排列后,最中间那2个数的平均数。

比如:

1,2,3,4,5  那中位数就是3

1,2,3,4,5,6 那中位数就是 (3+4)/2 = 3.5

知道逻辑后方法就很简单了 下面是代码

public static void main(String[] args) {
List<Integer> total = new ArrayList<Integer>();
total.add(4);
total.add(2);
total.add(3);
total.add(1);
total.add(5);
total.add(6);
double a = median(total);
System.out.println(a);
}
private static double median(List<Integer> total) {
double j = 0;
//集合排序
Collections.sort(total);
int size = total.size();
if(size % 2 == 1){
j = total.get((size-1)/2);
}else {
//加0.0是为了把int转成double类型,否则除以2会算错
j = (total.get(size/2-1) + total.get(size/2) + 0.0)/2;
}
return j;
}

1. 方法内先判断集合是奇数还是偶数,如果是奇数那么就是第n+1/2个数 ,也就是下标为n-1/2的值,

如果是偶数 就是第n/2和n/2+1的数的平均值 也就是下标为n/2-1和n/2的平均值

2. 该方法传入的是list集合  如果为数组  可以先用Arrays.aslist()方法转换后传入

最新文章

  1. ABP框架 - 实体
  2. C# DataGridView绑定数据源
  3. 编译osg的一个错误
  4. 图片lightbox2
  5. AOJ 0121 Seven Puzzle
  6. SQL2008附加数据库提示错误:5120
  7. Integer.valueOf与Integer.parseInt的小疑惑
  8. 如何在VC++ 中调试MEX文件
  9. EXCEL表格常用函数使用的难点
  10. html5画饼形图
  11. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(二)
  12. 简易祖玛--canvas
  13. 谈谈 ArrayList 和 LinkedList 的区别
  14. 转:mysql触发器
  15. 根据进程ID查找运行程序目录
  16. (原创)C++11改进我们的程序之move和完美转发
  17. Linux C 数据结构-&gt;双向链表(阴阳在六,何以言九~)
  18. September 20th 2017 Week 38th Wednesday
  19. linux中启动网卡报错:Bringing up interface eth1: Error: Connection activation failed
  20. 和java面试不得不说的故事

热门文章

  1. 【log4j】log4j.properties 文件示例
  2. 自动更新文件夹下所有DLL 至最新修改时间版本
  3. 前端知识扫盲-VUE知识篇一(VUE核心知识)
  4. 在vue项目中使用element-ui的Upload上传组件
  5. Android视频直播全屏实现
  6. h5 与原生 app 交互的原理
  7. swoole详解
  8. TMainMenu 类[三] - 手动建立菜单(5) : 给菜单项添加事件
  9. HBase管理与监控——HBase region is not online
  10. jenkins常用插件安装