首页 > 解决方案 > java - 如果可能,如何在Java中仅使用一个for循环在数组中的特定元素之前添加元素

问题描述

编码新手,只是想知道这是否可能。如果我有一个 (1,1,1,2,3) 数组和一个单独的空数组,我将在其中放置我的输出,是否可以只使用一个 for 循环来使每个元素在其之前添加所有元素。所以输出会是这样的(1,2,3,5,8)。所以它将是 (1, 1+1, 1+1+1, 1+1+1+2, 1+1+1+2+3)。我已经能够使用两个 for 循环来做到这一点,但无法找到一种方法来做到这一点。提前感谢您的帮助。

标签: javaarrays

解决方案


如果您不想自己实现它,已经有一种方法可以使用:

int[] nums = {1, 1, 1, 2, 3};
Arrays.parallelPrefix(nums,Integer::sum);
System.out.println(Arrays.toString(nums));

//[1, 2, 3, 5, 8]

如果您还需要进行除累积和之外的其他计算,这很有用。例如,如果您想将元素相乘而不是相加:

int[] nums = {1, 2, 3, 4, 5};
Arrays.parallelPrefix(nums, (i,j) -> i*j);
System.out.println(Arrays.toString(nums));

//[1, 2, 6, 24, 120]

从接受 int 数组的文档Arrays.parallelPrefix parallelPrefix(int[] array, IntBinaryOperator op)也有 long[]、double[] 的重载方法...)

使用提供的函数并行累积给定数组的每个元素。例如,如果数组最初保存 [2, 1, 0, 3] 并且操作执行加法,则返回时数组保存 [2, 3, 3, 6]。对于大型数组,并行前缀计算通常比顺序循环更有效。


推荐阅读