【问题标题】:How do I find the median of an unsorted array of integers in Java?如何在 Java 中找到未排序的整数数组的中位数?
【发布时间】:2015-08-24 14:34:00
【问题描述】:

我必须找到中位数之前和之后的元素的总和,尽可能接近。例如: 输入:{4,5,99,-1,5,6} 输出:3(索引为 3 的元素) //我们从 1 开始计数

public int median(int[] array) {
    int index = 0;
    int minSum;
    int sum = 0;
    int leftSum = 0;
    int rightSum = 0;
    int[] subtraction = new int[array.length];

    for (int i = 1; i < array.length; i++) {
        sum = array[i] + sum;
    }
    rightSum = sum;
    subtraction[0] = rightSum - leftSum;

    for (int i = 1; i < array.length; i++) {

        leftSum = leftSum + array[i - 1];

        rightSum = sum - array[i];
        if (leftSum > rightSum) {
            subtraction[i] = leftSum - rightSum;
        } else {
            subtraction[i] = rightSum - leftSum;
        }

    }

    minSum = subtraction[0];
    for (int i = 1; i < subtraction.length; i++) {
        if (subtraction[i] < minSum) {
            minSum = subtraction[i];
            index = i;
        }
    }

    return index + 1;
}

我知道我不必寻找最小值,但我找不到其他方法。我的问题是如何找到最接近的数字?

【问题讨论】:

  • 您确定要/需要找到中位数吗?因为在您的示例中,中位数为 5。最接近中位数的值为 4 或 6。
  • 这就是任务。我知道代码不起作用,但我不知道如何修复它。
  • 我的意思是即使你的结果也不符合你的要求。结果不能为 3,甚至不能作为索引。
  • 我不知道,因为我不明白你的确切问题是什么。 AFAIK 要找到中位数,您可以先对数组进行排序,然后找到中间的元素。
  • 听起来你正在寻找平衡一棵树

标签: java sum median


【解决方案1】:

输出:

中位数为:5,索引:3

public class Hello {

      static int[] integerArray = {4,5,99,-1,5,6};

      public static void main(String[] args){
          List<Integer> sortedArray = new ArrayList<Integer>();

          //fill up a Collection (ArrayList<Integer>) with your array values
          for(int integer : integerArray){
              sortedArray.add(integer);
          }

          //sort the collection
          Collections.sort(sortedArray);

          //get the index of the median (middle item of a sorted list)
          int index = sortedArray.size() / 2;

          //print the median and it's index
          System.out.println("median is: " + sortedArray.get(index) + " at index: " + index);
      }
}

【讨论】:

  • 我不必对其进行排序。左边的和和右边的和必须尽可能接近。输出:4,5,99,-1,5,6 中位数是索引 3 元素 99(左和 9)(右和 10)
  • @P.Peev 实际上中位数意味着一组已排序的数据,请参阅en.wikipedia.org/wiki/Median。如果您不是在寻找集合的中位数,请考虑改写您的问题。
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
  • 2016-03-02
  • 2018-09-10
相关资源
最近更新 更多