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