首页 > 解决方案 > 二维数组中的双中位数计算

问题描述

我必须实现一个静态公共方法在类“Functionality.java”中将一个双中位数计算实现为一个名为“medianInception”的静态公共方法该方法获取一个二维双精度数组作为输入参数并返回一个双精度值。
签名: medianInception(double[][] array) : double
首先要计算子数组的中位数。注意这些可以是未排序
的!要对单个数组进行排序,请使用 BubbleSort、InsertionSort 或 SelectionSort。然后将它们的中位数输入一个新的 (一维)数组,依次计算中位数,然后返回。如果其中一个数组为null或空,则返回Double.NaN。

查询一个数组是零还是空时,一定要先查询零,否则会出现NullPointerException!

我可以使用数学库

我的代码:

public static double median(int[] m) {

    int middle = m.length / 2;

    if (m.length % 2 == 1) {
      return m[middle];
    } else {
      return (m[middle - 1] + m[middle]) / 2.0;
    }

}

我的问题:这将是计算一维数组中的中位数。但我只是无法弄清楚如何为 2d 实现这一点。我还想要每个子数组的中位数。

标签: javaarrayschardoublemedian

解决方案


我的问题:这将是计算一维数组中的中位数。但我只是无法弄清楚如何为 2d 实现这一点。我还想要每个子数组的中位数。

二维数组是一维数组的数组。您需要做的就是迭代二维数组并将每行的中值存储到一维数组中。

public static double[] median(int[][] m) {
    double[] result = new double[m.length];
    for (int i = 0; i < m.length; i++) {
        int middle = m[i].length / 2;
        if (m[i].length % 2 == 1) {
            result[i] = m[i][middle];
        } else {
            result[i] = (m[i][middle - 1] + m[i][middle]) / 2.0;
        }
    }
    return result;
}

推荐阅读