java - 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 循环来做到这一点,但无法找到一种方法来做到这一点。提前感谢您的帮助。
解决方案
如果您不想自己实现它,已经有一种方法可以使用:
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]。对于大型数组,并行前缀计算通常比顺序循环更有效。
推荐阅读
- python - 在融合的 Kafka 中更改模式名称策略
- visual-studio - Visual Studio 是否有一个选项,以便 Resume Suspended Work 不会删除搁置集?
- python - How to cut non-alphanumeric prefix and suffix from a string in Python?
- plot - 如何在ps文件的ghostscript图中旋转方向?
- java - 如何比较两个 MimeMessage.java 对象以确保它们相同?
- javascript - 使用 string.split 时如何留下字符
- ruby - Rubocop 安装错误:无法构建 gems
- java - Karatsuba 算法实现:适用于较小的 ns,适用于较大的 ns
- uima - 无位置 GATHER?
- php - 根据键项值将整个 PHP 关联数组平均划分