【问题标题】:Multiply elements with other elements in a list将元素与列表中的其他元素相乘
【发布时间】:2021-01-23 00:58:22
【问题描述】:

我是编程新手,我正在用 Java 编写程序。

如何将列表中的每个元素与列表中的所有其他元素相乘? 像这样: [1, 3, 5, 7] 应该像这样相乘: 1 * 3 + 1 * 5 + 1 * 7 + 3 * 5 + 3 * 7 + 5 * 7

我该如何为此编写算法?我知道它是这样的,但我的大脑无法弄清楚我必须添加/更改什么。

    for (int index = 0; index < list.size(); index++) {
        sum += (list.get(index) * (list.get());
    }

谢谢!

【问题讨论】:

标签: java


【解决方案1】:

正如@WJS 所发布的,嵌套循环是一个简单但缓慢的解决方案——它的时间复杂度是O(n^2)。您可以使用单个循环来获得相同的结果,但使用O(n) 复杂性:注意,如何将总和表示为1 * (3 + 5 + 7) + 3 * (5 + 7) + 5 * 7:左乘数是当前索引位置,左乘数中的总和是前一个后缀总和.

long prevSuffixSum = 0, result = 0;
for (int i = nums.size() - 1; i >= 0; i--) {
    long val = nums.get(i);
    result += val * prevSuffixSum;
    prevSuffixSum += val;
}

【讨论】:

    【解决方案2】:
    public class Main {
    
        public static void main(String[] args) {
            List<Integer> ints = new LinkedList<>(Arrays.asList(-1,3,5,7));
    
            Integer total = 0;
            for (int i = 0 ; i < ints.size() ; i++){
                int counter = 1;
                while (counter < ints.size() - i){
                    total += ints.get(i) * ints.get(i+counter);
                    counter ++;
                }
            }
            System.out.println(total);
        }
    }
    

    【讨论】:

      【解决方案3】:

      这些方法是根据您的隐含要求提供的,即您必须明确地将每对元素相乘并取其总和。还有其他更有效的方法来实现总和。

      你需要一个嵌套循环。

      • 外循环从i = 0开始。
      • 内部循环开始一个k = i+1 = 1
      • 这样可以确保总和不包括每个条目的平方。
      List<Integer> nums = List.of(1,3,5,7);
      int sum = 0;
      for (int i = 0; i < nums.size(); i++) {
          for (int k = i+1; k < nums.size(); k++) {
              sum += nums.get(i)*nums.get(k);
          }
      }
      System.out.println(sum);
      

      打印

      86
      

      您也可以使用增强的 for 循环作为外部循环来执行此操作。但是第一种方法,imo,更直接。

      int sum = 0;
      int i = 1; 
      for (int v : nums) {
          for (int k = i++; k < nums.size(); k++) {
              sum += v*nums.get(k);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2018-12-01
        • 2022-01-25
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多