在Java中保持数字分布的收缩数组

在Java中保持数字分布的收缩数组,java,arrays,list,Java,Arrays,List,我有一个函数,它构建了一个包含N个元素的数组,分布范围为0到100。例如: int[] a = {100,80, 50,20, 0}; 我想调整此数组的大小,以使用N=10的大小填充新数组,但保留前一个数组的数字分布。我认为通过一些概率分布,我可以做到这一点,但我不知道如何做到这一点 有人能帮忙吗?如果我正确理解了这个问题,我们的目标是将源代码数组中的数字重新分配到新数组中,以10为单位将数字放入存储箱中。因此,如果数字是0,它应该转到索引0处的新数组(因为它在[0,10]范围内),如果数字是

我有一个函数,它构建了一个包含N个元素的数组,分布范围为0到100。例如:

int[] a = {100,80, 50,20, 0};
我想调整此数组的大小,以使用N=10的大小填充新数组,但保留前一个数组的数字分布。我认为通过一些概率分布,我可以做到这一点,但我不知道如何做到这一点


有人能帮忙吗?

如果我正确理解了这个问题,我们的目标是将
源代码
数组中的数字重新分配到新数组中,以10为单位将数字放入存储箱中。因此,如果数字是
0
,它应该转到索引
0
处的新数组(因为它在
[0,10]
范围内),如果数字是
20
,它应该转到索引
1
(因为它在
[11,20]
范围内),以此类推

如果假设是正确的,那么这是一种方法:

import java.util.Arrays;

public class ReDistribution {

  public static void main(String[] args) {
    int[] distribution = {100, 80, 50, 20, 0};
    System.out.println(Arrays.toString(reDistribute(distribution)));
    // prints: [0, 20, 0, 0, 50, 0, 0, 80, 0, 100]
  }

 /**
  * Assuming source array contains only integers in range [0, 100], redistributes into array
  * index       0,        1,        2,        3,        4,        5,        6,       7,         8,        9
  * range [0, 10], [11, 20], [21, 30], [31, 40], [41, 50], [51, 60], [61, 70], [71, 80], [81, 90], [91, 100]
  */
  private static int[] reDistribute(int[] source) {
    int[] target = new int[10];
    for (int num : source) {
      target[(num - 1) / 10] = num;
    }
    return target;
  }
}

“保留上一个数组的数字分布”是什么意思?这听起来像是一项在math.stackexchange.com比在这里更熟悉的任务。它还需要更多的规范:您希望保持哪些属性的一致性?最大/最小/平均/总和/分布/?你不可能拥有所有的数组(例如计数会很难)。嗯,假设我们拥有数组[1,30,70100]。我们如何将这个百分比数组转换成一个包含10个元素的新数组?@JoachimSauer,我理解。在我的情况下,我想保留分布。@JoãOpedromaris:你能解释什么是“分布”吗?