【问题标题】:Java List elements multiplication without using nested loop不使用嵌套循环的 Java List 元素乘法
【发布时间】:2021-11-27 13:28:41
【问题描述】:

我将整数 inputList 输入为 [1, 2, 3, 4],并希望 outputList 为 [24, 12, 8, 6]。逻辑如下:

outList[0] = inList[1]*inList[2]*inList[3]
outList[1] = inList[0]*inList[2]*inList[3]
outList[2] = inList[0]*inList[1]*inList[3]
.
.
outList[n] = inList[0]*inList[1]*...*inList[n-1]

Catch here 是在不使用嵌套循环的情况下实现这一点。我知道如何使用嵌套循环来做到这一点。 请提出一种方法来做到这一点。

【问题讨论】:

  • 我不确定我是否理解其中的逻辑。 outList[n] 是除inList[n] 之外的所有inLists 的乘积吗?
  • 不是求和,而是 inList 元素的乘积。
  • 提示/解决方案:只需计算一次所有数组元素的乘积并将该数字保存为totalProduct。然后可以通过简单的outlist[x] = totalProduct / inList[x] 计算outList[x] 的值
  • @rexD,输入数组是否足够好,不会包含 0 或太多/太大的数字导致整数溢出?
  • 输入数组可能包含也可能不包含 0,但整数溢出是一个有效的问题。暂时如果我们忽略溢出问题,那么@OHGODSPIDERS 提供的解决方案看起来不错。可以处理除以0。

标签: java arrays arraylist multiplication


【解决方案1】:

此方法创建一个新的outputArray,长度为输入数组和两个整数posproduct
在第一个 for 循环中找到数组的总乘积,然后在下一个循环中变量 pos 增加 1,只是为了得到 outputArray 的索引号。然后使用变量 pos 通过将数组的总乘积除以 inputArray 的每个元素来填充 outputArray,从而得到您要查找的内容。
当乘积超过任何 Integer 可以容纳的最大值时,这可能会引发异常。

 public static int[] calculateProduct(int[] array)
 {
     int[] outputArray = new int[array.length];
     int pos = -1;
     int product = 1;
    
     for(int a : array)
     {
         product *= a;
     }
    
     for(int x : array)
     {
         pos++;
         outputArray[pos] = product / x;
     }
    
     return outputArray;
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多